Ios NSData对图像质量的影响

Ios NSData对图像质量的影响,ios,objective-c,uiimage,nsdata,Ios,Objective C,Uiimage,Nsdata,我使用的是UIImage*image=[UIImage-imageWithData:data],但是图像的大小要大四倍。原始数据。长度=100KB,但是这个图像现在有400多KB。你可以说是压缩完成的。但是我在压缩数据后通过以下方法。长度=200 KB 以下是我的方式 压缩法 图像大小超过500 KB data.lenght=100KB 这是图像的数据长度 这是图像的图像 我不知道为什么,但是你可以像这样重新绘制图像: +(NSData *)compressDataWithImage:(UII

我使用的是
UIImage*image=[UIImage-imageWithData:data]
,但是图像的大小要大四倍。原始数据。长度=100KB,但是这个图像现在有400多KB。你可以说是压缩完成的。但是我在压缩数据后通过以下方法。长度=200 KB

以下是我的方式

压缩法

图像大小超过500 KB

data.lenght=100KB

这是图像的数据长度

这是图像的图像


我不知道为什么,但是你可以像这样重新绘制图像:

+(NSData *)compressDataWithImage:(UIImage *)image toMaxFIleSize:(NSInteger)maxFileSize {
UIImage *comImage;

comImage = image;
CGFloat compression = 1.0;
NSData *imageData = UIImageJPEGRepresentation(comImage, compression);
NSData *newData;
while (imageData.length > maxFileSize) {
    compression *= 0.5;
    newData = UIImageJPEGRepresentation(comImage, compression);
    if (newData.length == imageData.length) {
        CGSize newSize = CGSizeMake(comImage.size.width * 0.5, comImage.size.height * 0.5);
        UIGraphicsBeginImageContext(newSize);
        [comImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
        comImage = UIGraphicsGetImageFromCurrentImageContext();
        newData = UIImageJPEGRepresentation(comImage, compression);
    }
    imageData = newData;
  }

return imageData;

}


有没有办法将数据直接放入图像大小和数据长度大小中?您想实现什么?您想做什么?我想得到“data.lenght=100KB”,而不是457KB以上的图片Image@nvNoaDev如果更改图像的大小,则创建了一个新的“新闻大小”。我不想要图像sizeI对不起,这是我唯一知道的方式
- (void)loadPosterImage:(NSString *)imgURL {
    weakSelf();
    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:imgURL]
            options:SDWebImageDownloaderLowPriority
            progress:^(NSInteger receivedSize, NSInteger expectedSize) {}
            completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                strongSelf();
                //  image is through [UIImage imageWithData: data]
                self.posterImage = image;
                self.posterData = data;

            }];
}
+(NSData *)compressDataWithImage:(UIImage *)image toMaxFIleSize:(NSInteger)maxFileSize {
UIImage *comImage;

comImage = image;
CGFloat compression = 1.0;
NSData *imageData = UIImageJPEGRepresentation(comImage, compression);
NSData *newData;
while (imageData.length > maxFileSize) {
    compression *= 0.5;
    newData = UIImageJPEGRepresentation(comImage, compression);
    if (newData.length == imageData.length) {
        CGSize newSize = CGSizeMake(comImage.size.width * 0.5, comImage.size.height * 0.5);
        UIGraphicsBeginImageContext(newSize);
        [comImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
        comImage = UIGraphicsGetImageFromCurrentImageContext();
        newData = UIImageJPEGRepresentation(comImage, compression);
    }
    imageData = newData;
  }

return imageData;

}