UI이미지를 NSData로 변환
나는 내 앱에서 이 코드를 사용하고 있어서 이미지를 보내는 데 도움이 될 수 있도록 도와줄 것입니다.
하지만 이미지가 있는 이미지 뷰가 있습니다.나는 앱 번들에 파일이 없고 내 쪽에 이미지가 있습니다.아래 코드를 변경하려면 어떻게 해야 합니까? 누가 변환 방법을 알려줄 수 있습니까?myimage
로.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"];
이미지 형식에 따라 다음 중 하나를 시도합니다.
UIImageJPEG 표현
지정한 이미지의 데이터를 JPEG 형식으로 반환합니다.
NSData * UIImageJPEGRepresentation (
UIImage *image,
CGFloat compressionQuality
);
UIImagePNGR
지정한 이미지의 데이터를 PNG 형식으로 반환합니다.
NSData * UIImagePNGRepresentation (
UIImage *image
);
여기 서류들.
편집:
UI 이미지를 구성하는 원시 바이트에 액세스하려면 다음 방법을 사용할 수 있습니다.
CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage);
NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider));
const uint8_t* bytes = [data bytes];
이렇게 하면 이미지 RGB 픽셀의 낮은 수준 표현이 제공됩니다.CFBridgingRelease
ARC를 사용하지 않는 경우 비트).
NSData *imageData = UIImagePNGRepresentation(myImage.image);
UIImageView 내부에 "myImageView"와 같은 이미지가 있는 경우 다음 작업을 수행할 수 있습니다.
다음과 같이 UIImageJPEG 표현() 또는 UIImagePNGR 표현()을 사용하여 이미지를 변환합니다.
NSData *data = UIImagePNGRepresentation(myImageView.image);
//or
NSData *data = UIImageJPEGRepresentation(myImageView.image, 0.8);
//The float param (0.8 in this example) is the compression quality
//expressed as a value from 0.0 to 1.0, where 1.0 represents
//the least compression (or best quality).
또한 이 코드를 GCD 블록 안에 넣고 다른 스레드에서 실행하여 UIAactivity를 표시할 수 있습니다.프로세스 중 표시기 보기...
//*code to show a loading view here*
dispatch_queue_t myQueue = dispatch_queue_create("com.my.queue", DISPATCH_QUEUE_SERIAL);
dispatch_async(myQueue, ^{
NSData *data = UIImagePNGRepresentation(myImageView.image);
//some code....
dispatch_async( dispatch_get_main_queue(), ^{
//*code to hide the loading view here*
});
});
이미지의 참조를 만듭니다.
UIImage *rainyImage = [UIImage imageNamed:@"rainy.jpg"];
이미지 보기에 이미지 표시 중...영상 디스플레이는 영상 보기의 기준입니다.
imagedisplay.image = rainyImage;
그것을 로 바꾸다.NSData
지나가는 길에UIImage
참조하여 압축 품질을 부동값으로 제공합니다.
NSData *imgData = UIImageJPEGRepresentation(rainyImage, 0.9);
스위프트 4의 솔루션
extension UIImage {
var data : Data? {
return cgImage?.dataProvider?.data as Data?
}
}
UIImagePNGRresentation 함수가 선택적 값을 반환하므로 if-let 블록을 Data와 함께 사용하여 앱 충돌 및 코드의 안전한 실행을 방지합니다.
if let img = UIImage(named: "TestImage.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
참고: 데이터는 Swift 3 클래스입니다.Swift 3을 사용하는 경우 NSData 대신 데이터 사용
일반 이미지 작업(png 및 jpg 둘 다):
if let img = UIImage(named: "TestImage.png") { //UIImage(named: "TestImage.jpg")
if let data:Data = UIImagePNGRepresentation(img) {
handleOperationWithData(data: data)
} else if let data:Data = UIImageJPEGRepresentation(img, 1.0) {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}
확장명 사용:
extension UIImage {
var pngRepresentationData: Data? {
return UIImagePNGRepresentation(img)
}
var jpegRepresentationData: Data? {
return UIImageJPEGRepresentation(self, 1.0)
}
}
*******
if let img = UIImage(named: "TestImage.png") { //UIImage(named: "TestImage.jpg")
if let data = img.pngRepresentationData {
handleOperationWithData(data: data)
} else if let data = img.jpegRepresentationData {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}
- (void) imageConvert
{
UIImage *snapshot = self.myImageView.image;
[self encodeImageToBase64String:snapshot];
}
call this method for image convert in base 64
-(NSString *)encodeImageToBase64String:(UIImage *)image
{
return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
언급URL : https://stackoverflow.com/questions/6476929/convert-uiimage-to-nsdata
'programing' 카테고리의 다른 글
Java를 사용하여 Java 객체를 MongoDB 컬렉션에 삽입 (0) | 2023.06.26 |
---|---|
워크북을 전역 변수로 선언 (0) | 2023.06.26 |
Postgresql에서 "대소문자를 구분하지 않는" 쿼리를 만드는 방법은 무엇입니까? (0) | 2023.06.26 |
문자열의 악센트를 제거하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
C# MongoDB: 도메인 개체를 올바르게 매핑하는 방법은 무엇입니까? (0) | 2023.06.26 |