9
votes

couleur iOS à transparent dans l'uiimage

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> xxx pré>

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];


1 commentaires

@MB Comment avez-vous "Ajoutez le canal alpha après le processus de masquage?"


3 Réponses :


4
votes
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.

2 commentaires

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)



4
votes

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;
}


3 commentaires

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. :(



0
votes

Je l'ai fait dans CIImage avec le post-traitement de la vision étant un pixelbuffer: xxx


0 commentaires