Transparent Cercle Recadrée de l'Image avec PHP
Je veux recadrer un cercle d'image à l'aide de PHP, mais il semble que ma nouvelle image de quelques pixels transparents. Bien sûr, je ne veux que la zone à l'extérieur de l'ellipse d'avoir un fond transparent
Mon code est le suivant:
$image = imagecreatetruecolor($this->dst_w, $this->dst_h);
imagealphablending($image,true);
imagecopy ( $image , $image_s , 0, 0, $this->src_x, $this->src_y, $this->dst_w, $this->dst_h );
$mask = imagecreatetruecolor($this->src_x, $this->src_y);
$mask = imagecreatetruecolor($this->dst_w, $this->dst_h);
$transparent = imagecolorallocate($mask, 255, 0, 0);
imagecolortransparent($mask, $transparent);
imagefilledellipse($mask, $this->dst_w/2, $this->dst_h/2, $this->dst_w, $this->dst_h, $transparent);
$red = imagecolorallocate($mask, 0, 0, 0);
imagecopymerge($image, $mask, 0, 0, 0, 0, $this->dst_w, $this->dst_h,100);
imagecolortransparent($image, $red);
imagefill($image,0,0, $red);
if ($ext=="jpg" || $ext=="jpeg") {
imagejpeg($image, $this->croppedImage);
} else if ($ext=="png") {
imagepng($image, $this->croppedImage);
}
imagedestroy($image);
imagedestroy($mask);
//<------- END generate cropped Image ------->
//<------- START generate transparent Image ------->
$this->generateTransparentImage('circle');
......
Un exemple de réelle de l'image générée est ici:
EDIT: generateTransparentImage fonction n'a rien à voir avec le code ci-dessus; cette fonction générer cette image:
http://s7.postimage.org/byybq9163/Koala7_500x375_c_transparent.png
Si vous voulez que les autres à jouer avec votre code, vous devez partager l'image d'origine. Aussi le code de
double possible de PHP - polygone de masquage de l'image - Si vous ne voulez pas utiliser une bibliothèque, le code-source de Wideimage est un logiciel gratuit de sorte que vous pouvez le porter dans votre application. Sinon, il y a beaucoup de questions existantes, qui montrent diverses autres façons de faire, les honoraires libres de regarder autour de soi: stackoverflow.com/search?q=%5Bphp%5D+%5Bgd%5D+mask
generateTransparentImage
est caché afin que d'autres personnes ne peuvent pas se reproduire.double possible de PHP - polygone de masquage de l'image - Si vous ne voulez pas utiliser une bibliothèque, le code-source de Wideimage est un logiciel gratuit de sorte que vous pouvez le porter dans votre application. Sinon, il y a beaucoup de questions existantes, qui montrent diverses autres façons de faire, les honoraires libres de regarder autour de soi: stackoverflow.com/search?q=%5Bphp%5D+%5Bgd%5D+mask
OriginalL'auteur Larry | 2012-10-18
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs choses à noter :
@DainisAbols suggéré, il serait préférable de prendre une couleur inhabituelle pour votre transparence. Ici, vous êtes en utilisant le noir :
Même si votre var est appelé en rouge, le R-G-B valeur est 0-0-0. Rare couleurs: bleu flashy (0-0-255), flashy vert (0-255-0), jaune flashy (255-255-0), flashy cyan (0-255-255) et rose flashy (255-0-255). Le rouge est assez commun partout et n'est pas flashy, donc je l'exclure de ces couleurs spéciales.
Puis, même si vos images ici sont à la fois vraie couleur, c'est une bonne pratique pour attribuer une couleur pour chaque image. Dans l'exemple ci-dessus, vous créez un
$red
variable contenant le noir pour$mask
, mais vous l'utilisez comme couleur de transparence dans$image
.Enfin, vous dessinez une ellipse qui ont le même rayon que la taille de vos images, si vous avez besoin de
imagefill
chaque coins de votre image et pas seulement en haut à gauche. Dans votre exemple, il fonctionne, mais c'est seulement parce que vous avez sélectionné le noir à la couleur transparente.Ici est la pleine mise en œuvre.
Démo :
Résultat :
bonjour, je viens de vérifier et je confirme que la transparence fonctionne ici
la preuve: home.fuz.org/tests/test-circle-crop.php (utilisez une couleur de fond pour vérifier si l'image générée est transparent)
le code de la démo ci-dessus: pastebin.com/xe07p34e
OriginalL'auteur Alain Tiemblo
D'un recadrage et suppression de couleur noire ( ou la mise en noir transparent ). Depuis votre image en noir couleur, il est également supprimé.
Au lieu de supprimer la couleur, essayer de remplacer les couches extérieures de la couleur, c'est à dire, de rose et puis le mettre à transparent.
OriginalL'auteur Peon
Je couln pas fait avec Alain du code. Après un certain temps de comprendre ce que chaque ligne de code, voici ma correction..
OriginalL'auteur Dhex