将 UIImage 转换为 NSData

我使用这个代码在我的应用程序,这将帮助我发送一个图像。

但是,我有一个带图像的图像视图。我在 appbundle 中没有文件,但是在我这边有图像。如何更改下面的代码?谁能告诉我如何将 myimage转换成 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"];
176348 次浏览

根据您的图像格式,请尝试下列操作之一:

UIImageJPEG 表示

以 JPEG 格式返回指定图像的数据。

NSData * UIImageJPEGRepresentation (
UIImage *image,
CGFloat compressionQuality
);

UIImagePNG 代表处

以 PNG 格式返回指定图像的数据

NSData * UIImagePNGRepresentation (
UIImage *image
);

这里的文件。

编辑:

如果希望访问组成 UIImage 的原始字节,可以使用以下方法:

CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage);
NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider));
const uint8_t* bytes = [data bytes];

这将为您提供图像 RGB 像素的低级表示。 (如果不使用 ARC,请省略 CFBridgingRelease位)。

NSData *imageData = UIImagePNGRepresentation(myImage.image);

创建图像的参考..。

UIImage *rainyImage = [UIImage imageNamed:@"rainy.jpg"];

在图像视图中显示图像... ... 图像显示是图像视图的参考:

imagedisplay.image = rainyImage;

通过传递 UIImage引用将其转换为 NSData并提供浮点数值的压缩质量:

NSData *imgData = UIImageJPEGRepresentation(rainyImage, 0.9);

如果你在 UIImageView 中有一个图像,例如“ myImageView”,你可以做到以下几点:

使用 UIImageJPEGRe歪()或 UIImagePNGRRe歪()转换图像,如下所示:

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*
});
});
- (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];
}

Swift 4中的解决方案

extension UIImage {
var data : Data? {
return cgImage?.dataProvider?.data as Data?
}
}

使用 if-let 块与数据,以防止应用程序崩溃和安全执行的代码,因为函数 UIImagePNGReform 返回一个可选的值。

if let img = UIImage(named: "TestImage.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}

注意: 百科是 Swift 3级。使用 Data 代替 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...
}
}