Est-il possible de ne (isoler) qu'une seule couleur dans l'image? Actuellement, je suis intéressé par le vert: 005d00Comment isoler une seule couleur sur une image avec PHP?
3
A
Répondre
1
Eh bien, vous pouvez le faire en utilisant ImageMagick via la ligne de commande:
convert original.png -matte (+clone -fuzz 1 -transparent #005d00) -compose DstOut -composite isolated.png
La commande -fuzz peut prendre un écart de pourcentage par rapport à la couleur, si elle est spécifique, déposez le fuzz.
Le() crochets doivent Echappés dans bash shell \ (\), etc.
2
Vous pouvez utiliser la fonction imagecolorat()
de gd.
Juste itérer sur chaque pixel, vérifiez si c'est la couleur que vous voulez, sinon set en noir ou blanc ou ce que vous voulez faire avec.
Voici un exemple de travail:
function colorEquals($rgb_color, $hex_color)
{
$r = ($rgb_color >> 16) & 0xFF;
$g = ($rgb_color >> 8) & 0xFF;
$b = $rgb_color & 0xFF;
list($hr, $hg, $hb) = sscanf($hex_color, '%2s%2s%2s');
$hr = hexdec($hr);
$hg = hexdec($hg);
$hb = hexdec($hb);
return $r == $hr && $g == $hg && $b == $hb;
}
$width = 300;
$height = 300;
// create 300x300 image
$img = imagecreatetruecolor($width, $height);
// fill grey
$color = imagecolorallocate($img, 127, 127, 127);
imagefill($img, 0, 0, $color);
// set a square of pixels to 005d00
$your_color = imagecolorallocate($img, 0, 93, 0);
imagefilledrectangle($img, 10, 10, 100, 100, $your_color);
$white = imagecolorallocate($img, 255, 255, 255);
for($x = 0; $x < $width; ++$x)
{
for($y = 0; $y < $height; ++$y)
{
$color = imagecolorat($img, $x, $y);
if(!colorEquals($color, '005d00'))
{
// set it to white
imagesetpixel($img, $x, $y, $white);
}
}
}
// output
header('Content-type: image/png');
imagepng($img);
Questions connexes
- 1. Comment isoler une seule couleur dans une image
- 2. isoler une partie d'une URL avec php
- 3. isoler une partie d'un URL avec php
- 4. Avec PHP/GD, comment couper une image?
- 5. Isoler une trame emacs
- 6. Convertir PNG transparent en couleur à une seule couleur
- 7. Remplacer une seule couleur dans PIL?
- 8. Python: PIL remplacer une seule couleur RGBA
- 9. Comment concaténer des icônes en une seule image avec ImageMagick?
- 10. Comment télécharger une image avec PHP?
- 11. Comment agrandir une image avec PHP GD?
- 12. UIColor colorWithPatternImage utilise une seule image
- 13. Comment faire une seule image (PNG/JPG) à partir d'un certain nombre d'images sur PHP?
- 14. Remplacer la couleur sur une image en temps réel
- 15. comment modifier une couleur dans une image par programme?
- 16. Comment vérifier si une image RVB ne contient qu'une seule couleur?
- 17. Isoler l'image jointe d'un email avec php
- 18. Supprimer une couleur d'une image bitmap?
- 19. Comment obtenir une couleur majoritaire dans une image?
- 20. Problème: Movie Clip contient une seule image
- 21. Isoler texte liste déroulante avec PHP
- 22. Comment afficher une image avec des paramètres d'URL avec PHP
- 23. Comment inclure une image dans une autre image en PHP?
- 24. Créer des liens dans une seule image
- 25. Image sur une image
- 26. mettre une image sur l'autre
- 27. plusieurs images dans une seule image
- 28. Comment superposer une image sur une autre?
- 29. PHP si la chaîne contient une URL isoler
- 30. Comment compiler une image sur une autre image avec PIL en Python?
Il serait extremally de temps pour les grandes images. Merci pour la réponse mais je pensais plutôt à supprimer tous les bleus et les rouges de l'image. Mais je ne sais pas comment le faire. –
@mickula: Il est impossible d'obtenir plus efficace que cela (peut-être par un facteur constant - mais pas par une quantité asymptotiquement significative). Pensez-y: chaque pixel doit être réitéré au moins une fois pour conserver la couleur ou la modifier, à moins que vous n'utilisiez un format d'image inconnu qui offre des informations supplémentaires. – Cam
'$ average = new Imagick (" duzykevarska.png "); header ("Content-Type: image/png"); $ clut = new Imagick(); $ clut-> newImage (1, 1, nouvelle ImagickPixel ("rgb (0,93,0)")); $ average-> opaquePaintImage (nouveau ImagickPixel ("rgb (0,93,0)"), "blanc", 255, true); echo $ average; ' –