我和UIImage有透明度。
我正在将UIImage的PNG表示上传到我的Web服务,该服务接受的数据少于800K。
所以基本上我想减小尺寸(不是几何的物理I.E.),即降低uimage的质量。
请不要指向我的Quartz指南
请不要提供使用UIImage IT支持透明度的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);
答案 0 :(得分: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%附近。
祝你好运。