iPhone에서 PNG 이미지에서 흰색을 가리십시오
문제
이미 관련 게시물이 이미 있다는 것을 알고 있지만 명확하지 않습니다 ...
그래서 사건은 이것입니다 ... :
나는있다 UIImage
a로 구성됩니다 png
그물의 URL에서 요청 된 파일. 흰색 색상을 마스킹하여 투명하게 해줄 수 있습니까?
내가 지금까지 시도한 모든 것 CGImageCreateWithMaskingColors
, 흰색 이미지를 반환합니다 ...
모든 도움을받는 사람은 소중합니다 :)
해결책
OK 솔루션을 찾았고 잘 작동하기 때문에 내 질문에 대답하고 있으며 이것이 같은 필요를 가진 많은 사람들에게 유용 할 것이라고 믿습니다.
우선 나는 그것이 내 연장이 좋을 것이라고 생각했다. UIImages
카테고리를 통해 :
uiimage+utils.h
#import <UIKit/UIKit.h>
@interface UIImage (Utils)
- (UIImage*)imageByClearingWhitePixels;
@end
uiimage+utils.m
#import "UIImage+Utils.h"
@implementation UIImage (Utils)
#pragma mark Private Methods
- (CGImageRef) CopyImageAndAddAlphaChannel:(CGImageRef) sourceImage {
CGImageRef retVal = NULL;
size_t width = CGImageGetWidth(sourceImage);
size_t height = CGImageGetHeight(sourceImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef offscreenContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedFirst);
if (offscreenContext != NULL) {
CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), sourceImage);
retVal = CGBitmapContextCreateImage(offscreenContext);
CGContextRelease(offscreenContext);
}
CGColorSpaceRelease(colorSpace);
return retVal;
}
- (UIImage *) getMaskedArtworkFromPicture:(UIImage *)image withMask:(UIImage *)mask{
UIImage *maskedImage;
CGImageRef imageRef = [self CopyImageAndAddAlphaChannel:image.CGImage];
CGImageRef maskRef = mask.CGImage;
CGImageRef maskToApply = CGImageMaskCreate(CGImageGetWidth(maskRef),CGImageGetHeight(maskRef),CGImageGetBitsPerComponent(maskRef),CGImageGetBitsPerPixel(maskRef),CGImageGetBytesPerRow(maskRef),CGImageGetDataProvider(maskRef), NULL, NO);
CGImageRef masked = CGImageCreateWithMask(imageRef, maskToApply);
maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(imageRef);
CGImageRelease(maskToApply);
CGImageRelease(masked);
return maskedImage;
}
#pragma mark Public Methods
- (UIImage*)imageByClearingWhitePixels{
//Copy image bitmaps
float originalWidth = self.size.width;
float originalHeight = self.size.height;
CGSize newSize;
newSize = CGSizeMake(originalWidth, originalHeight);
UIGraphicsBeginImageContext( newSize );
[self drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Clear white color by masking with self
newImage = [self getMaskedArtworkFromPicture:newImage withMask:newImage];
return newImage;
}
@end
마지막으로, 나는 다음과 같이 사용할 수 있습니다 : (수입 후 UIImage+Utils.h
물론이야)
UIImage *myImage = [...]; //A local png file or a file from a url
UIImage *myWhitelessImage = [myImage imageByClearingWhitePixels]; // Hooray!
다른 팁
실제로는 불가능합니다. 최소한 쉬운 방법은 없으며 API 호출은 없습니다. 기본적으로 Photoshop에서 일반적으로 수행되는 이미지 편집 문제입니다. 투명한 배경을 가진 대부분의 이미지가 그렇게 만들어졌습니다.
제휴하지 않습니다 StackOverflow