Dane zapisywane na iPhone iOS uzyskane z UIImageJPEGRepresentation () zawodzą po raz drugi: ImageIO: CGImageRead_mapData 'open' nie powiodło się
Wpadam na dziwny problem z moją manipulacją UIImage.
Wykonuję synchronizację skrzynki odbiorczej i muszę przechowywać moje obrazy jako pliki lokalne. Aby to zrobić, zapisuję je za pomocąUIImagePNGRepresentation(image)
lubUIImageJPEGRepresentation(image, 0.66)
Oto mój typowy przepływ pracy: Użytkownik wybiera obraz lub robi zdjęcie Obraz zostaje przypisany do widoku obrazu UIImage widoku obrazu zostaje zapisany w pliku przy użyciu poniższej metody
Następnym razem, gdy użytkownik ponownie otworzy aplikację, odczytam obraz z pliku za pomocą
[UIImage imageWithContentsOfFile:fullImagePath]
To działa raz.
Po drugim uruchomieniu procedury otrzymuję komunikat o błędzie wymieniony poniżej podczas próby zapisania obrazu na dysku ponownie.
//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]
Otrzymuję ten błąd, gdy próbuję ponownie zapisać obraz, który został wcześniej przekonwertowany na JPEG lub 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
Wydaje mi się, że ten błąd ma miejsce, ponieważ próbuję ponownie zapisać obraz jako JPEG ponownie. Jeśli poproszę widok, aby renderował się w kontekście (skutecznie tworząc nowy obraz), błąd nie występuje.
Czy ktoś wie, co robię źle? Czy brakuje mi jakiegoś rodzaju metadanych, próbując przekonwertować UIImage na dane, przeładować go i ponownie przekonwertować po wyświetleniu go użytkownikowi?