So habe ich viele JPG-Bilder mit weißem Hintergrund, die ich in meine App laden, und ich möchte die weißen Hintergründe programmgesteuert entfernen. Ich habe eine Funktion, die das tut, aber es verursacht einige gezackte Ränder um jedes Bild. Gibt es eine Möglichkeit, diese Kanten zu mischen, um glatte Kanten zu erzielen?Ziel C: Wie man einen weißen Hintergrund aus einem JPG-Bild entfernt, ohne Kantenqualität zu verlieren
Meine aktuelle Methode:
-(UIImage *)changeWhiteColorTransparent: (UIImage *)image
{
CGImageRef rawImageRef=image.CGImage;
const CGFloat colorMasking[6] = {222, 255, 222, 255, 222, 255};
UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);
CGImageRef maskedImageRef=CGImageCreateWithMaskingColors(rawImageRef, colorMasking);
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, image.size.height);
CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height), maskedImageRef);
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
CGImageRelease(maskedImageRef);
UIGraphicsEndImageContext();
return result;
}
Ich weiß, dass ich die Farbe Maskierungswert ändern kann, aber ich glaube nicht, jede Kombination ein glattes Bild ohne weißen Hintergrund produzieren.
Heres ein Beispiel:
Diese Methode entfernt auch zusätzliche Pixel innerhalb der Bilder, die auf weißen Nähe sind:
Ich denke, die ideale Methode, um die Alpha ändern würde von weißen Pixeln, je nachdem, wie nahe an reinem Weiß sie sind, anstatt sie alle nur zu entfernen. Irgendwelche Ideen würden geschätzt werden.
wird, um den Beispielcode herunterladen genannt. Es kann einfacher sein, einen Kernel-Verarbeitungsalgorithmus zu verwenden als pro Pixel-Berechnungen. Die Dokumentation zu CIFilter enthält ein [Beispiel] (https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_filer_recipes/ci_filter_recipes.html). GPUImage hat auch Beispiele. –