在cocoa dev中将图像从PNG格式调整为PNG格式

时间:2010-07-30 06:35:19

标签: cocoa image-processing

我在cocoa应用程序中使用此代码将PNG文件的大小调整为某个维度,但我希望格式仍然是PNG,但NSImage没有PNGRepresentation方法。 我该怎么做?

NSData * sourceData = [NSData dataWithContentsOfFile:fileName];

NSImage *sourceImage = [[NSImage alloc] initWithData: sourceData];

NSSize originalSize = [sourceImage size];
float resizeWidth = originalSize.width - 10;
float resizeHeight = originalSize.height - 10;
NSImage *resizedImage = [[NSImage alloc] initWithSize: NSMakeSize(resizeWidth, resizeHeight)];

[resizedImage lockFocus];
[sourceImage drawInRect: NSMakeRect(0, 0, resizeWidth, resizeHeight) fromRect: NSMakeRect(0, 0, originalSize.width, originalSize.height) operation: NSCompositeSourceOver fraction: 1.0];
[resizedImage unlockFocus];

NSData *resizedData = [resizedImage TIFFRepresentation];
[resizedData writeToFile:@"~/playground/resized.tif" atomically:YES];
[sourceImage release];
[resizedImage release]; 

1 个答案:

答案 0 :(得分:0)

您需要一个位图图像代表来询问其PNG表示。

当您将焦点锁定在已调整大小的图像上时,创建并init a bitmap image rep with the focused “view”,传递图像的边界(原点NSZeroPoint,矩形的大小=图像的大小)。然后请代表its representation as a PNG file代表。

请注意,您将丢失DPI,gamma,颜色配置文件等属性。如果要保留这些属性,则需要使用Core Graphics完成整个工作,从阅读文件开始({{3} })通过调整图像大小(使用CGImageSource)来编写新文件(使用CGBitmapContext)。