UIImage 操作で奇妙な問題が発生しています。
ドロップボックス同期を行っており、画像をローカル ファイルとして保存する必要があります。そのために、UIImagePNGRepresentation(image)
またはを使用して保存します。UIImageJPEGRepresentation(image, 0.66)
これが私の典型的なワークフローです: ユーザーが画像を選択するか、写真を撮ります 画像が imageView に割り当てられます 画像ビューの UIImage は、以下のメソッドを使用してファイルに保存されます
次にユーザーがアプリを再度開いたときに、次を使用してファイルから画像を読み戻します
[UIImage imageWithContentsOfFile:fullImagePath]
これは一度機能します。
ルーチンを 2 回目に実行したときに、イメージをディスクにもう一度保存しようとすると、以下に示すエラー メッセージが表示されます。
//saving the image
NSData* data = isPNG?UIImagePNGRepresentation(image):UIImageJPEGRepresentation(image, 0.66);
BOOL success = [data writeToFile:filepath atomically:YES];
if(!success)
{
DLog(@"failed to write to file: %@",filepath );
}
//loading the image
[UIImage imageWithContentsOfFile:fullImagePath]
以前に JPEG または PNG に変換された画像を再保存しようとすると、このエラーが発生します。
2012-05-21 08:16:06.680 file already exists: NO
ImageIO: CGImageRead_mapData 'open' failed '/var/mobile/Applications/C1312BF8-C648-4397-82F3-D93E4FAAD35F/Documents/imageData/LogoImage.jpg'
error = 2 (No such file or directory)
May 21 08:16:06 <Error>: ImageIO: JPEG Not a JPEG file: starts with 0xff 0xd9
May 21 08:16:06 <Error>: ImageIO: JPEG Application transferred too few scanlines
このエラーは、画像をもう一度 JPEG として保存しようとしたために発生しているようです。ビューにコンテキストでそれ自体をレンダリングするように要求した場合 (効果的に新しい画像を作成する)、エラーは発生しません。
私が間違っていることを誰かが知っていますか?UIImage をデータに変換してリロードし、ユーザーに表示した後にもう一度変換しようとすると、ある種のメタデータが欠落していますか?