画像を NSData に変換して画像サイズをバイト単位で計算しましたが、そのデータ長が間違った値になりました。
NSData *data = UIImageJPEGRepresentation(image,0.5);
NSLog(@"image size in bytes %lu",(unsigned long)data.length);
画像を NSData に変換して画像サイズをバイト単位で計算しましたが、そのデータ長が間違った値になりました。
NSData *data = UIImageJPEGRepresentation(image,0.5);
NSLog(@"image size in bytes %lu",(unsigned long)data.length);
実際、ここの UIImage.length 関数は間違った値を返しているわけではなく、UIImage から NSData への不可逆な変換/復帰の結果です。
UIImageJpegRepresentation で compressionQuality を可能な限り低い圧縮 1.0 に設定すると、元の画像は返されません。このプロセスでイメージ メタデータが削除されますが、この関数は元のオブジェクトよりも大きなオブジェクトを生成する可能性があり、通常は生成されます。このファイルサイズの増加は、圧縮された元の画像の品質も向上させないことに注意してください。jpeg はもともと高度に圧縮されているため、非常に頻繁に使用されます。関数は圧縮を解除してから再圧縮します。年齢を重ねて体が伸びた後にボトックスを打つようなもので、見た目はオリジナルに似ているかもしれませんが、内部は以前ほど良くありません.
大きなファイルでは、1.0 に近い圧縮品質を条件付きで使用できます。これは、品質が急速に低下するためです。それ以外では、画像の最終的な目的に応じて、おそらく圧縮率の調整に加えて、画像のサイズを変更するか、解像度を調整するしかありません。この変更により、データ使用量が指数関数的に削減されます。Web およびモバイルでの使用では、通常、デジタル印刷用の画像などの解像度は必要ありません。
各画像と NSData の表現を、個々のデータの制約に合わせて必要なだけ調整するコードを書くことができます。