我正在寻找使用 CATiledLayer 在 iOS 设备上显示巨大的 PNG 图像。为此,我需要在客户端将较大的图像拆分为图块(100%、50%、25% 和 12.5%)(不能在服务器端创建图块)。
我可以看到有诸如 libjpeg-turbo 之类的库可以工作,但是这些是用于 JPEG 的,我需要使用 PNG。
有谁知道我可以采用大 PNG(~20Mb)并在设备上从中生成图块的方法?
任何指示或建议将不胜感激!
谢谢!
您可以使用内置的 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)。