我正在开发一个图像绘制应用程序,其中用户可以在图像上绘制草图。 但是在对图像进行草图绘制一段时间后,图像文件大小会急剧增加。 (例如,如果将一个1.6 mb的jpeg图像描绘一段时间,它将变为2.3 mb。尺寸会根据草图的数量而增加) 如果我使用Mac中的预览对图像进行相同数量的草图绘制,则根本不会影响图像文件大小。下面是编辑前后的示例图像(因为这里的图像上传限制是2 mb,我只做了少量的草图绘制)
不确定导致图像文件大小急剧增加的原因。 PFB代码片段。
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
currentLocation = [touch locationInView:containerImgVIew];
UIGraphicsBeginImageContext(drawingView.frame.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[drawingView.image drawInRect:CGRectMake(0, 0, drawingView.frame.size.width, drawingView.frame.size.height) blendMode:kCGBlendModeNormal alpha:1];
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineWidth(ctx, slider.value);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, location.x, location.y);
CGContextAddLineToPoint(ctx, currentLocation.x, currentLocation.y);
CGContextStrokePath(ctx);
drawingView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
location = currentLocation;
}
// touchesEnded method implemented same as touchesMoved
- (IBAction)saveButtonTapped:(id)sender
{
UIGraphicsBeginImageContextWithOptions(_originalImageSize, YES, containerImgVIew.image.scale);
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeNormal);
[containerImgVIew.image drawAtPoint:CGPointZero];
CGFloat scale = _originalImageSize.width / drawingView.frame.size.width;
CGContextScaleCTM(UIGraphicsGetCurrentContext(), scale, scale);
[drawingView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *jpgData = UIImageJPEGRepresentation(viewImage, 1);
}
绘制一段时间后图像的文件大小远远大于原始图像大小。我试过png图像,但结果是一样的。
答案 0 :(得分:1)
您可以在saveButtonTapped
NSData* jpgData = UIImageJPEGRepresentation(viewImage, 0.8);
像0.8这样的东西不应该太明显,应该真正改善文件大小。
答案 1 :(得分:0)
iPhone上的照片存储为JPEG文件。 JPEG文件始终是压缩的。 " ...不得使用压缩"这不是一个可以实现的要求。
使用设备相机拍摄的照片以约0.75质量(我估计)存储。当您从JPEG实例化UIImage时,磁盘上的压缩数据将被解压缩,并且在您编辑时RAM中会存在完整大小的未压缩图像。通过JPEG压缩和解压缩一次,这种内存中的副本会稍微降低。
您可以对内存中的未压缩图像进行编辑。保存更改后,再次将图像数据压缩为JPEG。您拨打UIImageJPEGRepresentation
并选择压缩级别。选择0.75左右的值应该会为您加载的图像提供类似的文件大小。
每次使用JPEG格式压缩图像时,都会使图像略微降级。在高JPEG质量设置下,这些降级非常难以察觉。这种迭代性降级只是使用JPEG等有损压缩格式的一部分。