2

我和 UIImage 具有透明度。

我正在将 UIImage 的 PNG 表示形式上传到我的 Web 服务,该服务接受小于 800K 的数据。

所以基本上我想减小大小(不是几何的,而是物理的 IE,以字节为单位),即降低 uimage 的质量。

请不要将我指向 Quartz 指南

请不要使用 UIImage 的 JPEG 表示它不支持透明度

请不要让图像变小然后缩放它

我需要减少 UIImage 中的颜色任何想法如何通过 Quartz 实现它?

在我尝试之后,创建了一个上下文并绘制了图像。玩过 bytesPerRow 但仍然失败,请帮助找到解决方案!

size_t width = CGImageGetWidth(image.CGImage);
size_t height = CGImageGetHeight(image.CGImage);
size_t bitsPerComponent = CGImageGetBitsPerComponent(image.CGImage);
size_t bytesPerRow = CGImageGetBytesPerRow(image.CGImage);

CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGContextRef ctx = CGBitmapContextCreate(NULL, // Let CG allocate it for us
                                         width,
                                         height,
                                         bitsPerComponent,
                                         bytesPerRow,
                                         colorSpace,
                                         kCGImageAlphaPremultipliedLast); // RGBA
CGColorSpaceRelease(colorSpace);
CGRect rect = CGRectMake( 0, 0, CGImageGetWidth(image.CGImage), CGImageGetHeight(image.CGImage));
CGContextDrawImage( ctx, rect, image.CGImage);

CGImageRef newImg = CGBitmapContextCreateImage(ctx);
UIImage* compressedImage = [UIImage imageWithCGImage:newImg];
CGImageRelease(newImg);

CGContextRelease(ctx);
4

1 回答 1

0

虽然 JPEG 不支持透明度,但实际上仍有 JPEG 选项。

获取当前的 PNG 并创建两个文件,一个有损 JPEG 文件,一个只有 alpha 通道的 PNG。ImageMagick 非常适合这个顺便说一句。

然后将 JPEG 加载到 UIImage 中,并将 PNG 作为掩码应用到 UIImage 中,瞧,你就有了一个透明的 JPEG。嗯,有点。

我这里没有我的实现,如果我这样做是我的客户项目的一部分,所以我不愿意分享它,但本指南将帮助您入门:http: //jeroendeleeuw.com/post/ 33638733049/how-to-mask-images-with-core-graphics-in-ios作为参考,我的尺寸减少了 80% 左右。

祝你好运。

于 2013-08-07T20:09:43.740 回答