0
.png 이미지를 수정하여 폴더에 저장하고 싶습니다. iPhone에 저장된 PNG가 다시로드 된 후에 달라집니다.
- 는 수정을 NSData
- 에서 새있는 UIImage를 만들 일부 픽셀
- 을 수정 이미지 뷰의 이미지 속성 에 폴더에
- 설정이 동일있는 UIImage이있는 UIImage 저장을 NSData
- 에있는 UIImage로 변환
UIImage의 이미지를 확인하면 픽셀 데이터는 정확하지만 저장된 이미지를로드하면 픽셀 데이터가 조금 다릅니다 t를 수정 된 값에서.
- 107 -76 -43 RGBA888 형식의 원 화상으로부터 하나 개의 화소 -1 //
- 93 -89 -1 -56 // 변경된 화소 값
- 예 :
93 -89 -56 -1 // imageView의 이미지로 설정하고 다시 읽은 후 픽셀 값
- 95 -91 -57 -1 // 이미지 값을 다시로드 한 후
내 이미지 저장 방법 :
- (void) saveImage: (UIImage*) image toFolder: (NSString*) folder
{
[self.library saveImage: image toAlbum: folder withCompletionBlock:^(NSError *error) {
if (error!=nil) {
NSLog(@"Error: %@", [error description]);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message: [error description]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Image saved!"
message: nil
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}];
}
픽셀 수정 방법 :
CGImageRef cRef = CGImageRetain(_imageView.image.CGImage);
NSData* pixelData = (NSData*) CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(cRef)));
// image raw data
signed char* pixelBytes = (signed char *)[pixelData bytes];
// MODIFY SOME PIXEL HERE
NSData* newPixelData = [NSData dataWithBytes:pixelBytes length:[pixelData length]];
// cast NSData as CFDataRef
CFDataRef imgData = (CFDataRef)CFBridgingRetain(newPixelData);
// Make a data provider from CFData
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData(imgData);
// get PNG properties from cRef
size_t width = CGImageGetWidth(cRef);
size_t height = CGImageGetHeight(cRef);
size_t bitsPerComponent = CGImageGetBitsPerComponent(cRef);
size_t bitsPerPixel = CGImageGetBitsPerPixel(cRef);
size_t bytesPerRow = CGImageGetBytesPerRow(cRef);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(cRef);
CGBitmapInfo info = CGImageGetBitmapInfo(cRef);
CGFloat *decode = NULL;
BOOL shouldInteroplate = NO;
CGColorRenderingIntent intent = CGImageGetRenderingIntent(cRef);
// cRef PNG properties + imgDataProvider's data
CGImageRef throughCGImage = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, info, imgDataProvider, decode, shouldInteroplate, intent);
CGDataProviderRelease(imgDataProvider);
// make UIImage with CGImage
UIImage* newImage = [UIImage imageWithCGImage:throughCGImage];
CGImageRelease(throughCGImage);
[self saveImage:newImage toFolder:@"DEMOFOLDER"];
_imageView.image = newImage;