7
votes

PHP image pixelate?

Je dois faire cet effet avec PHP. Je sais qu'il existe img_filter_pixelate dans le filtre d'image PHP. Mais j'en ai besoin d'être plus lisse et de gaufré? comme dans cette image:

image

Cet effet rendra une image téléchargée par l'utilisateur devenu pixelated et le bord de l'image devient rouge (je connais img_filter_edgetect, mais je ne sais pas comment l'utiliser pour changer de couleur de bord).

Je ne sais pas comment faire cela.


3 commentaires

L'image que vous avez liée ressemble à celle provenait d'un filtre Photoshop. Vous n'allez probablement pas être capable de reproduire ce look exact sans une programmation de manipulation d'image assez hardcore. Pouvez-vous créer un ensemble d'images d'échantillons, un «avant» et un «après» qui démontre l'effet exact que vous recherchez?


Pour l'effet pixelate, je pense que c'est comme le filtre Patchwork dans Photoshop. Comment puis je faire ça?


flickr.com/photos/52700219@n06/6729984045 Je crée ceci en utilisant Texture de filtre Patchwork Photoshop, et pour la photo du bas, j'utilise Remplacer la couleur.


5 Réponses :


1
votes

Voici théoriquement:
Vous avez une image:

RGBRGBRGBRGBB
GBRGBRGBRGBR
GBRGBRGBRRGB
BRGGBGRGGRBGG

Prenez la couleur du premier pixel et réglez la même couleur pour un carré de pixels suivants (bas et à droite). Ensuite, prenez la couleur d'un 5ème pixel (comme 4 autres dans le début ont déjà la même couleur). Si vous avez terminé pour la première rangée, allez +3 rangs et recommencez.

Donc, vous obtenez:
RrrrggbBBBB
RrrrggbBBBB
RrrrggbBBBB
RrrgrggBBBB

en PHP, vous pouvez utiliser les fonctions suivantes pour faire ceci:
http://php.net/manual/fr/function.imagecolorat.php Pour sélectionner la couleur d'un pixel
http://php.net/manual/fr/function.imagecolorset.php Pour régler la couleur d'un pixel
http://php.net/manual/fr/function.imagesx.php Obtenir la largeur de l'image
http://php.net/manual/fr/function.imagesy.php Obtenir la hauteur de l'image

Utiliser pour les boucles à travers les pixels d'une image


2 commentaires

Salut, merci de votre réponse. Je peux faire la couleur de remplacement en utilisant ces fonctions que vous avez mentionnées. Maintenant, je dois trouver un moyen de faire l'effet de pixellate .. aucune idée?


Toute la post était sur la façon de faire l'effet de pixellate ... Comment pourriez-vous le manquer? :) Je vais faire un exemple de script avec des commentaires. Attendez une nouvelle réponse / commentaire.



16
votes

Comme la dernière réponse était théorique et semblait ne pas être suffisante, j'ai créé un exemple pratique:
Remarque: Ceci est loin de la fonction «Idéal» et parfaite Effect Pixelate, mais il fait son emploi. N'hésitez pas à le modifier selon vos propres besoins. XXX

Il s'agit de l'exemple de fonction pour créer un effet pixelé sur les images. Voici un exemple de résultats d'utiliser cette fonction:
Original:

Pixélie 5PX:

Pixélie 10PX:

Pixélie 20px:


4 commentaires

Oh merci. Mais j'en ai besoin pour être comme dans flickr.com/photos/52700219@n06/6729984045, j'ai créé ceci à l'aide de la texture de filtre Patchwork de Photoshop. Dans cette image, on dirait que chaque carré est gaufré. c'est possible?


Fondamentalement, oui ... Vous devez changer l'obscurité des pixels extérieurs d'une place ... C'est plus de travail que et je n'ai malheureusement pas le temps d'écrire le script maintenant.


J'utilise enfin votre script et ajoutez ce script de Merci!


@Henrikpeinar puis-je savoir comment économiser chaque pixel d'images?




0
votes

Ceci est ma tentative du problème.

Vous pouvez modifier la taille du bloc pixelate et vous pouvez appliquer un flou qui adoucit l'effet sur des images de contraste élevées. Peut être une image lente sur de grandes tailles de blocs pixelate cependant. P>

Les scripts stockent les couleurs des pixels pertinents dans une matrice. Il assure ensuite l'image, modifie le contraste selon les besoins, pixelate l'image à l'aide de la fonction ImageFilter (), puis (si une amélioration de la tuile est définie) l'embossise à nouveau (cela augmente l'effet 3D sur les tuiles finales). Si BLUR est requis, le script applique le flou gaussien. Le script dessine ensuite des carrés remplis à l'aide du réseau de couleurs pour créer l'effet pixelisé coloré dans les bordures de tuiles en relief. P>

function pixelatemboss($image,$blockwidth=10,$blur=5,$tileenhance="true",$contrast=0,$negate="true")
{
    if($blockwidth>1)
    {
        imagefilter($image,IMG_FILTER_CONTRAST,$contrast);

        for($x=1;$x<imagesx($image);$x=$x+$blockwidth)
        {
            for($y=1;$y<imagesy($image);$y=$y+$blockwidth)
            {
                $color[$x][$y]=imagecolorat($image,$x,$y);
            }
        }

        imagefilter($image,IMG_FILTER_EMBOSS);
        imagefilter($image,IMG_FILTER_CONTRAST,$contrast);
        imagefilter($image,IMG_FILTER_PIXELATE,$blockwidth,false);
        if($tileenhance=="true")
        {
            imagefilter($image,IMG_FILTER_EMBOSS);
        }
        for($b=0;$b<$blur;$b++)
        {
            imagefilter($image,IMG_FILTER_GAUSSIAN_BLUR);
        }
        for($x=1;$x<imagesx($image);$x=$x+$blockwidth)
        {
            for($y=1;$y<imagesy($image);$y=$y+$blockwidth)
            {
                $rgb=$color[$x][$y];
                $r = ($rgb >> 16) & 0xFF;
                $g = ($rgb >> 8) & 0xFF;
                $b = $rgb & 0xFF;
                $col=imagecolorallocate($image,$r,$g,$b);
                imagefilledrectangle($image,$x,$y,$x+($blockwidth-2),$y+($blockwidth-2),$col);  
            }
        }
    }
    return $image;
}


0 commentaires

0
votes

Remarque pour PHP 5.4 et up Vous devez utiliser:

imageJPEG($image, "", 75);


0 commentaires