Używam tego kodu w mojej aplikacji, który pomoże mi wysłać obraz.
Jednak mam widok obrazu z obrazem. Nie mam pliku w appbundle, ale mam obraz po swojej stronie. Jak mogę zmienić poniższy kod? Czy ktoś może mi powiedzieć, jak mogę przejść myimage
na NSData
?
// Attach an image to the email
NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"jpg"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"rainy"];
objective-c
ios
ipad
cocoa-touch
nsdata
Christina
źródło
źródło
Odpowiedzi:
Wypróbuj jedną z poniższych opcji, w zależności od formatu obrazu:
Tutaj docs .
EDYTOWAĆ:
jeśli chcesz uzyskać dostęp do surowych bajtów, które tworzą UIImage, możesz użyć tego podejścia:
Zapewni to niskopoziomową reprezentację pikseli RGB obrazu. (Pomiń ten
CFBridgingRelease
bit, jeśli nie używasz ARC).źródło
(id)CFBridgingRelease(CGDataProviderCopyData(provider))
przejął na własnośćCDataRef
zwrócone przezCGDataProviderCopyData
ARC.data
wystarczyłoby, czy nadal wystąpiłby wyciek pamięci.źródło
Jeśli masz obraz wewnątrz UIImageView, np. „MyImageView”, możesz wykonać następujące czynności:
Przekonwertuj swój obraz za pomocą UIImageJPEGRepresentation () lub UIImagePNGRepresentation () w następujący sposób:
Możesz również umieścić ten kod w bloku GCD i wykonać w innym wątku, pokazując podczas procesu UIActivityIndicatorView ...
źródło
Utwórz odniesienie do obrazu ....
wyświetlanie obrazu w widoku obrazu ... obraz jest odniesieniem do widoku obrazu :
przekonwertuj go na
NSData
, przekazującUIImage
odniesienie i podaj jakość kompresji w wartościach zmiennoprzecinkowych:źródło
Rozwiązanie w Swift 4
źródło
cgImage.dataProvider
kodowane są dane? Wydaje się, że różni się od danychUIImagePNGRepresentation
iUIImageJPEGRepresentation
ponieważ nie można go użyć do stworzenia takiego obrazuUIImage(data: imageData)
.UIImageJPEGRepresentation
zapewnia. Uważam jednak, że to rozwiązanie zachowuje oryginalny format kodowania, w którym znajdował się obraz, i nie koduje go ponownie.Użyj bloku if-let z danymi, aby zapobiec awariom aplikacji i bezpiecznemu wykonywaniu kodu, ponieważ funkcja UIImagePNGRepresentation zwraca wartość opcjonalną.
Ogólne operacje na obrazach (zarówno png, jak i jpg):
Korzystając z rozszerzenia:
źródło
źródło