Использование NSAffineTransform для поворота результатов NSImage в файл в два раза больше

Я использую следующий код, чтобы перевернуть (повернуть на 180 градусов) NSImage, Но новый образ в два раза больше (МБ, а не размеров) оригинала при сохранении на диск. Я хочу, чтобы он был примерно таким же, как оригинал. Как я могу сделать это?

NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:[[_imageView image] TIFFRepresentation]];
NSImage *img = [[NSImage alloc] initWithSize:NSMakeSize(imageRep.pixelsWide, imageRep.pixelsHigh)];
[img lockFocus];
NSAffineTransform *rotator = [NSAffineTransform transform];
[rotator translateXBy:imageRep.pixelsWide yBy:imageRep.pixelsHigh];
[rotator scaleXBy:-1 yBy:-1];
[rotator concat];
[imageRep drawInRect:NSMakeRect(0, 0, imageRep.pixelsWide, imageRep.pixelsHigh)];
[img unlockFocus];

Код, который я использую для сохранения изображения на диск:

[[NSFileManager defaultManager] createFileAtPath:path contents:[img TIFFRepresentation] attributes:nil];

Заранее спасибо!

1 ответ

Решение

Я до сих пор не знаю причину этого, но один из способов это сохранить в формате JPEG вместо TIFF. Метод, который я написал, выглядит следующим образом:

- (void)CompressAndSaveImg:(NSImage *)img ToDiskAt:(NSString *)path WithCompressionFactor:(float)value{
    NSData *imgData = [img TIFFRepresentation];
    NSBitmapImageRep *imgRep = [NSBitmapImageRep imageRepWithData:imgData];
    NSNumber *compressionFactor = [NSNumber numberWithFloat:value];
    NSDictionary *imageProps = [NSDictionary dictionaryWithObject:compressionFactor forKey:NSImageCompressionFactor];
    imgData = [imgRep representationUsingType:NSJPEGFileType properties:imageProps];
    [imgData writeToFile:path atomically:YES];
}

Вы можете поиграть с WithCompressionFactor:(float)value параметр, но 0.75 отлично работает для меня

Другие вопросы по тегам