Comment puis-je effacer la partie magenta d'un uiimage et le rendre transparent?
J'ai parcouru de nombreuses réponses et des liens à ce sujet et rien ne fonctionne (par exemple, Comment faire une couleur transparente sur un uiimage? Réponse 1 Supprime tout sauf rouge, répondre 2 apparemment ne fonctionne pas à cause de Pourquoi CgimagecreatewithmaskingColors () renvoyant nil dans Ce cas? ). p>
update: strong> p> Si j'utilise cgimagecreatewithmaskingcoling avec l'uiimage, je reçois une valeur nulle. Si je retirais le canal alpha (je représente l'image comme JPEG et le lisez-le) CGIMAGEReReewithMaskingColorScolings Retourne une image peinte avec un fond noir. P> update2, le code: strong> p > retour nul: p> retourner une image avec fond noir (qui est normal car il n'y a pas de canal alpha): P> UIImage *inputImage = [UIImage imageWithData:UIImageJPEGRepresentation(anchorWithMask, 1.0)];
const float colorMasking[6] = {222, 255, 222, 255, 222, 255};
CGImageRef imageRef = CGImageCreateWithMaskingColors(inputImage.CGImage, colorMasking);
NSLog(@"image ref %@", imageRef);
// imgref is NOT nil.
UIImage *image = [UIImage imageWithCGImage:imageRef];
3 Réponses :
UIImage *image = [UIImage imageNamed:@"image.png"]; const float colorMasking[6] = {1.0, 1.0, 0.0, 0.0, 1.0, 1.0}; image = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(image.CGImage, colorMasking)]; You receive nil, because parameters, that you send is invalid. If you open Apple documentation, you will see this: Components An array of color components that specify a color or range of colors to mask the image with. The array must contain 2N values { min[1], max[1], ... min[N], max[N] } where N is the number of components in color space of image. Each value in components must be a valid image sample value. If image has integer pixel components, then each value must be in the range [0 .. 2**bitsPerComponent - 1] (where bitsPerComponent is the number of bits/component of image). If image has floating-point pixel components, then each value may be any floating-point number which is a valid color component. You can quickly open documentation by holding Option + Mouse Click on some function or class, like CGImageCreateWithMaskingColors.
Je viens d'essayer cela et ça retourne un uiimage complètement transparent.
Voici comment l'image d'entrée ressemble à: i.imgur.com/lxjdm.png (ceci est la version PNG, en interne c'est un uiimage d'uiimagepicker)
J'ai fait cette fonction statique qui supprime l'arrière-plan blanc, vous pouvez l'utiliser en remplacement du masque avec la plage de couleurs que vous souhaitez supprimer:
+ (UIImage*) processImage :(UIImage*) image { const float colorMasking[6]={222,255,222,255,222,255}; CGImageRef imageRef = CGImageCreateWithMaskingColors(image.CGImage, colorMasking); UIImage* imageB = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); return imageB; }
Cela fonctionne sur mon projet et je supprime la gamme de couleurs blanches. Je pense que vous spécifiez la gamme de couleurs comme celle-ci que j'utilise à partir de 222 -> 255 pour que le rouge soit retiré. Je ne comprendrais peut-être pas à 100% mais vous pouvez l'essayer à nouveau avec la plage dont vous avez besoin.
@khaledannaNarjar J'ai utilisé ce code, c'est un travail parfait mais reste-t-il un peu de pixcel blanc ne peut pas retirer du bord de la ligne blanche que j'ai dessinée de manière programmative dans mon application
@keyur Bhalodiya Vous pouvez essayer de changer les gammes de la couleur blanche (ce qui le rend plus large), à part cela, je ne sais pas comment vous aider. :(
Je l'ai fait dans CIImage avec le post-traitement de la vision étant un pixelbuffer:
@MB Comment avez-vous "Ajoutez le canal alpha après le processus de masquage?"