конвертировать UIImage в NSData
Я использую этот код в моем приложении, которое поможет мне отправить изображение.
однако, у меня есть вид изображения с изображением. У меня нет файла в appbundle, но есть изображение на моей стороне. Как я могу изменить приведенный ниже код ? Может кто-нибудь сказать мне, как я могу преобразовать myimage to NSData ?
// Attach an image to the email
NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"jpg"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"rainy"];
7 ответов:
попробуйте выполнить одно из следующих действий, в зависимости от формата изображения:
UIImageJPEGRepresentation
возвращает данные для указанного изображения в формате JPEG.
NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality );UIImagePNGRepresentation
возвращает данные для указанного изображения в формате PNG
NSData * UIImagePNGRepresentation ( UIImage *image );EDIT:
если вы хотите получить доступ необработанные байты что составляют UIImage, вы можете использовать этот подход:
CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage); NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider)); const uint8_t* bytes = [data bytes];это даст вам низкоуровневое представление изображения RGB пикселей. (Опустить
CFBridgingReleaseбит, Если вы не используете ARC).
Если у вас есть изображение внутри UIImageView, например "myImageView", вы можете сделать следующее:
преобразуйте изображение с помощью UIImageJPEGRepresentation () или UIImagePNGRepresentation () следующим образом:
NSData *data = UIImagePNGRepresentation(myImageView.image); //or NSData *data = UIImageJPEGRepresentation(myImageView.image, 0.8); //The float param (0.8 in this example) is the compression quality //expressed as a value from 0.0 to 1.0, where 1.0 represents //the least compression (or best quality).вы также можете поместить этот код внутри блока GCD и выполнить в другом потоке, показывая UIActivityIndicatorView во время процесса ...
//*code to show a loading view here* dispatch_queue_t myQueue = dispatch_queue_create("com.my.queue", DISPATCH_QUEUE_SERIAL); dispatch_async(myQueue, ^{ NSData *data = UIImagePNGRepresentation(myImageView.image); //some code.... dispatch_async( dispatch_get_main_queue(), ^{ //*code to hide the loading view here* }); });
создать ссылку на изображение....
UIImage *rainyImage = [UIImage imageNamed:@"rainy.jpg"];отображение изображения в виде изображения... imagedisplay ссылка imageview:
imagedisplay.image = rainyImage;преобразовать его в
NSData, передавUIImageссылка и обеспечить качество сжатия в значениях с плавающей запятой:NSData *imgData = UIImageJPEGRepresentation(rainyImage, 0.9);
решение в Swift 4
extension UIImage { var data : Data? { return cgImage?.dataProvider?.data as Data? } }
используйте блок if-let с данными для предотвращения сбоя приложения и безопасного выполнения кода, поскольку функция UIImagePNGRepresentation возвращает необязательное значение.
if let img = UIImage(named: "TestImage.png") { if let data:Data = UIImagePNGRepresentation(img) { // Handle operations with data here... } }Примечание: сведения это Swift 3 класса. Используйте данные вместо NSData с помощью Swift 3
общие операции с изображениями (например, png и jpg):
if let img = UIImage(named: "TestImage.png") { //UIImage(named: "TestImage.jpg") if let data:Data = UIImagePNGRepresentation(img) { handleOperationWithData(data: data) } else if let data:Data = UIImageJPEGRepresentation(img, 1.0) { handleOperationWithData(data: data) } } ******* func handleOperationWithData(data: Data) { // Handle operations with data here... if let image = UIImage(data: data) { // Use image... } }С помощью расширения:
extension UIImage { var pngRepresentationData: Data? { return UIImagePNGRepresentation(img) } var jpegRepresentationData: Data? { return UIImageJPEGRepresentation(self, 1.0) } } ******* if let img = UIImage(named: "TestImage.png") { //UIImage(named: "TestImage.jpg") if let data = img.pngRepresentationData { handleOperationWithData(data: data) } else if let data = img.jpegRepresentationData { handleOperationWithData(data: data) } } ******* func handleOperationWithData(data: Data) { // Handle operations with data here... if let image = UIImage(data: data) { // Use image... } }
- (void) imageConvert { UIImage *snapshot = self.myImageView.image; [self encodeImageToBase64String:snapshot]; } call this method for image convert in base 64 -(NSString *)encodeImageToBase64String:(UIImage *)image { return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; }
Comments