Я работаю над графическим приложением, в котором пользователь может набросать поверх изображения. Но после эскиза изображения на некоторое время размер файла изображения резко возрастает. (например, если изображение jpeg размером 1,6 мб нарисовано в течение некоторого времени, оно становится 2,3 мб. Размер увеличивается в зависимости от количества эскизов) Если я делаю то же количество эскизов изображения, используя Preview на Mac, он не эффект размер файла изображения вообще. Ниже приведены примеры изображений до и после редактирования (как предел загрузки изображений здесь составляет 2 мб, я сделал лишь небольшое количество зарисовок)iOS - Рисунок на UIImage значительно увеличивает размер файла изображения
Не уверен, что вызывает резкое увеличение размера файла изображения. 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-изображениями, но результаты одинаковы.
Спасибо за объяснение @alexkent. Еще одно сомнение. Когда я использовал UIImageJPEGRepresentation (изображение, 0.99) без редактирования и сохранения данных непосредственно на диск, размер файла изображения становится почти наполовину. Это идеальное поведение? – Manoj