1 votes

Comment supprimer certaines couleurs d'une image avec PHP ou Ruby ?

Supposons qu'il y a 3 cercles : rouge, bleu, noir.

Je veux seulement que le cercle noir reste. Comment puis-je supprimer les cercles rouges et bleus ?

6voto

Etan Points 4436

Comme vous avez demandé une solution en PHP:

  • Commencez par charger votre image avec imagecreatefrompng ou les fonctions similaires pour d'autres formats d'image

  • Ensuite, utilisez imagesx et imagesy pour obtenir la taille de l'image.

  • Maintenant, vous pouvez boucler sur tous les pixels via

    for ($i = 0; $i < $imageWidth; $i++) {
        for ($j = 0; $j < $imageHeight; $j++) {
            // vérifiez la couleur et remplacez
        }
    }
  • Enfin, utilisez imagecolorat pour obtenir la couleur (vérifiez si elle se situe dans une plage spécifique, ne prenez pas seulement le noir comme une bonne couleur, mais aussi toutes les couleurs qui ont >= 250 pour chaque valeur de rouge, vert et bleu par exemple)

  • ... et imagecolorset pour définir la couleur

  • Vous pouvez maintenant enregistrer l'image en utilisant imagepng par exemple.

1voto

Wayne Conrad Points 31052

ImageMagick le fera. Il suffit d'exécuter cette commande :

convert circles.png -channel black -white-threshold 10% circles2.png

Vous n'avez pas précisé ce qu'il faut faire avec le vert. Ce script opte pour la solution facile et élimine également le vert. En fait, il élimine tout ce qui n'est pas noir.

La librairie RMagick vous permet de piloter ImageMagick avec Ruby. Malheureusement, cela ne fonctionne pas dans ma distribution, donc je ne peux pas vous préparer un exemple. Cependant, utiliser system ou backtick pour exécuter la commande fonctionne très bien.

0voto

user241759 Points 1

Si vous savez quel format d'image est utilisé, vous pourriez probablement utiliser cette information pour éviter d'accéder via les valeurs de pixels (ce qui pourrait endommager la qualité de l'image), sinon faites quelque chose de similaire à ceci :

  1. Obtenez l'image sous forme de tableau de pixels
  2. Parcourez chaque pixel, en le définissant sur la couleur d'arrière-plan s'il se situe à une certaine distance de seuil de l'une des couleurs que vous voulez supprimer.

Cela repose sur le fait qu'il y a une couleur d'arrière-plan donnée à tout moment à laquelle les pixels peuvent être définis et que vous pouvez identifier les couleurs à supprimer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X