Mogę tworzyć UIImage
z NSData
użyciem [UIImage imageWithData:]
lub[UIImage initWithData:]
metody.
Zastanawiam się, czy mogę NSData
odzyskać z istniejącej UIImage
? Coś na liniiNSData *myData = [myImage getData];
cocoa-touch
uiimage
nsdata
eugene
źródło
źródło
UIImageJPEGRepresentation
lubUIImagePNGRepresentation
spowoduje zmianę danych i dokonanie ponownej konwersji. Czy jest jakiś sposób, aby naprawdę osiągnąć to, o co proszono?Podczas inicjalizacji
UIImage
obiektu za pomocąinit(data: originalData)
,originalData
zostanie on przekonwertowany na surowe dane w jakimś wewnętrznym formacie. Te dane można pobrać później za pomocąJednak ponieważ
rawData
jest surowy, będzie jeszcze większy niż podczas używaniaUIImagePNGRepresentation
.źródło
Możesz oczekiwać, że UIImage jest obiektem sformatowanym do wyświetlania, a więc nie będzie używał oryginalnych danych (które prawdopodobnie są w formacie PNG lub JPEG), ale bardziej prawdopodobnie tablicy pikseli lub innego formatu wewnętrznego. Innymi słowy,
UIImage(data: foo)
nie zachowafoo
.Jeśli chcesz po prostu użyć go w innym miejscu w swoim programie, oryginalny UIImage będzie dobrze (zakładam, że tak nie jest w tym przypadku)
Jeśli chcesz serializować,
UIImagePNGRepresentation(...)
będzie działać, ale będzie zbyt duży, jeśli oryginał był w formacie JPEG;UIImageJPEGRepresentation(...)
często powoduje nieznaczne przewymiarowanie danych i powoduje niewielkie straty, jeśli oryginał był w formacie PNG. Powinno być w porządku, aby wybrać taki w oparciu o sposób wyświetlania obrazu i oczekiwany format. Jeśli korzystasz z PNG i chcesz, aby PNG został usunięty, powinieneś uzyskać dobry rozmiar pliku i prawie identyczne dane, odkładając na bok specjalne fragmenty PNG.Jeśli chcesz uzyskać dokładną kopię oryginalnych danych (na przykład, aby zapisać plik po utworzeniu miniatury lub do SHA1), musisz zachować je osobno. Możesz zrobić coś takiego:
źródło
Tylko dlatego, że się na to natknąłem i lubię szybki :)
Oto szybkie tłumaczenie postu Caroiline.
Lub
źródło
Swift 4.2
źródło
Sytuacja zmieniła się od czasu udzielenia powyższej odpowiedzi, dla tych, którzy wciąż szukają, ponieważ podzielają obawy CipherCom: iOS 5 dodał właściwość CIImage .
źródło
CIImage
jest ustawiana tylko wtedy, gdy została zainicjowana za pomocąimageWithCIImage:
. Ponadto nie są to bezpośrednio używane dane, ale raczej inny obiekt reprezentujący obraz.