从大型PNG生成切片

时间:2013-01-03 16:20:29

标签: ios image png tiling

我希望使用CATiledLayer在iOS设备上显示巨大的PNG图像。为此,我需要在客户端上将较大的图像分割成图块(100%,50%,25%和12.5%)(在服务器端创建图块不是一种选择)。

我可以看到libjpeg-turbo等库可能有效,但这些库适用于JPEG,我需要使用PNG。

有没有人知道我可以采用大型PNG(~20Mb)并在设备上生成瓷砖的方法?

任何指针或建议都将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用内置的Core Graphics CGDataProviderCreateWithFilename和CGImageCreateWithPNGDataProvider API打开图像,然后通过执行以下操作创建每个图块:

const CGSize tileSize = CGSizeMake(256, 256);
const CGPoint tileOrigin = ...; // Calculate using current column, row, and tile size.
const CGRect tileFrame = CGRectMake(-tileOrigin.x, -tileOrigin.y, imageSize.width, imageSize.height);

UIGraphicsBeginImageContextWithOptions(tileSize, YES, 1);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, tileFrame, image.CGImage);

UIImage *tileImage = UIGraphicsGetImageFromCurrentImageContext();
[UIImagePNGRepresentation(tileImage) writeToFile:tilePath atomically:YES];
UIGraphicsEndImageContext();

您可能还想查看UIScrollView类参考下引用的相关示例项目(Large Image Downsizing和PhotoScroller)。