2016-07-26 11 views
1

Ich füge einen Bildrahmen (Bild mit transparentem Hintergrund) um einen vorhandenen UIImage hinzu und speichere alles als ein Bild. Am Simulator sieht alles wie toll aus. Auf dem Gerät werden jedoch einige weiße Pixel um einige Bereiche des Bilds des Rahmens herum hinzugefügt. Hier ist mein Code:Weiße Pixel um iOS Bild mit CIFilter

- (void)applyFilter { 
    NSLog(@"Running"); 

    UIImage *borderImage = [UIImage imageNamed:@"IMG_8055.PNG"]; 

    NSData *dataFromImage = UIImageJPEGRepresentation(self.imgView.image, 1); 

    CIImage *beginImage= [CIImage imageWithData:dataFromImage]; 

    CIContext *context = [CIContext contextWithOptions:nil]; 
    CIImage *border =[CIImage imageWithData:UIImagePNGRepresentation(borderImage)]; 
    border = [border imageByApplyingTransform:CGAffineTransformMakeScale(beginImage.extent.size.width/border.extent.size.width, beginImage.extent.size.height/border.extent.size.height)]; 

    CIFilter *filter= [CIFilter filterWithName:@"CISourceOverCompositing"]; //@"CISoftLightBlendMode"]; 
    [filter setDefaults]; 
    [filter setValue:border forKey:@"inputImage"]; 

    [filter setValue:beginImage forKey:@"inputBackgroundImage"]; 

    CIImage *outputImage = [filter valueForKey:@"outputImage"]; 







    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
    UIImage *newImg = [UIImage imageWithCGImage:cgimg]; 

    self.imgView.image = newImg; 

} 

Hier ist das resultierende Bild:

enter image description here

Der Bildrahmen im Bild verwendet sieht wie folgt aus:

enter image description here

Hier ist ein Screenshot des Frame-Bildes in Photoshop, zeigt diese Pixel nicht in der PNG.

enter image description here

Antwort

0

Das Problem ist, dass, wenn Sie an Ihrem Bild sehen, sind die Pixel unmittelbar neben den Noten scheinbar nicht transparent. Und wenn Sie bemerken, sind diese weißen Pixel, die im letzten Bild erscheinen, nicht nur die gelegentlichen Pixel, sondern sie erscheinen in quadratischen Blöcken.

Diese Art von quadriertem Pixelrauschen ist ein verräterisches Zeichen für JPEG-Artefakte. Es ist schwer zu sagen, was das verursacht, weil das Bild, das Sie zu dieser Frage hinzugefügt haben, ein JPEG war (das keine Transparenz unterstützt). Ich nehme an, Sie müssen eine PNG-Version dieses Hintergrunds haben? Möglicherweise müssen Sie dies mit uns teilen, um diese Diagnose zu bestätigen.

Aber die Quintessenz ist, dass Sie das Originalbild und die Transparenz der Pixel, die als weißes Rauschen erscheinen, sorgfältig untersuchen müssen. Stellen Sie sicher, dass beim Erstellen/Bearbeiten dieser Bilder die JPEG-Dateiformate vermieden werden, da dadurch Transparenzinformationen verloren gehen und Artefakte auftreten. PNG-Dateien sind oft sicherer.

+0

Das Original ist ein transparentes PNG. Im Simulator erscheint das Weiß nicht. – user717452

+0

Definitiv nicht das Problem. Öffnen Sie einfach das PNG in PHOTOSHOP und gezoomt, um transparent zu bestätigen, außer für Notizen und Titel oben. Fügen Sie einen Screenshot hinzu, der dies in OP zeigt – user717452

+0

@ user717452 - Ich habe Ihren Code mit meinen eigenen Bildern und nicht die Artefakte, die Sie beschreiben, erlebt. Ich würde vorschlagen, dass Sie das PNG-Bild, das sich im Paket Ihrer App befindet, nochmals überprüfen und sicherstellen, dass es dem in Photoshop verifizierten PNG-Bild entspricht. Bearbeiten Sie die Frage vielleicht so, dass sie die tatsächlichen Bilder enthält, damit wir das von Ihnen beschriebene Verhalten reproduzieren können. Bis wir das Verhalten reproduzieren können, können wir Ihnen nicht helfen. Und meine Versuche mit deinem Code und meinen eigenen Bildern haben gut funktioniert. – Rob

Verwandte Themen