2

私は透過性を持つ UIImage を持っています。

UIImage の PNG 表現を Web サービスにアップロードしています。これは、たとえば 800K 未満のデータを受け入れます。

したがって、基本的には、サイズを縮小したいと思います(ジオメトリではなく、物理的な IE のバイト単位)。つまり、uimage の品質を下げます。

クォーツのガイドラインに私を向けないでください

UIImage の JPEG 表現の使用を提案しないでください IT は透明性をサポートしていません

画像を縮小してから拡大縮小することを提案しないでください

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 ファイルとアルファ チャネルのみの PNG の 2 つのファイルを作成します。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 に答える