Mon sujet concerne l'ajout de filigrane aux images à l'aide du code PHP. Exemple est ici http://php.net/manual/en/image.examples-watermark.phpPourquoi la taille devient plus grande lors de l'utilisation de imagecreatefromjpeg/png/gif/bmp au besoin pour ajouter un filigrane
Je fais face à un problème est que l'exemple mentionné traite seulement des images JPEG seulement car il utilise la fonction imagecreatefromjpeg().
J'ai utilisé cette fonction Je ne me souviens pas d'où je l'ai eu. Il crée une image d'autres types png, bmp et gif.
function imageCreateFromAny($filepath){
$type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize()
$allowedTypes = array(
1, // [] gif
2, // [] jpg
3, // [] png
6 // [] bmp
);
if (!in_array($type, $allowedTypes)) {
return false;
}
switch ($type) {
case 1 :
$im = imageCreateFromGif($filepath);
break;
case 2 :
$im = imageCreateFromJpeg($filepath);
break;
case 3 :
$im = imageCreateFromPng($filepath);
break;
case 6 :
$im = imageCreateFromBmp($filepath);
break;
}
return $im;
}
LE PROBLÈME: L'image de sortie de la fonction est une image de son numéro de taille, est multiplié par quatre, je veux dire la taille devient plus gros près de 4 fois. Par exemple, si la fonction a reçu l'image au format 94K, elle l'affiche autour de 380K.
Je veux résoudre le problème de maximiser le nombre de taille, je veux obtenir la même taille d'image avant la taille de l'image était entrée à la fonction imageCreateFromAny (filepath de $)
Astuce: Le ci-dessous fonction est appelant la fonction ci-dessus
function Stamp($filename){
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('../../style/images/stamp1.png');
// $im = imagecreatefromjpeg('../../gallery/black-white/'.$filename);
$im = imageCreateFromAny('../../gallery/black-white/'.$filename);
// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Copy the stamp image onto our photo using the margin offsets and the photo
// width to calculate positioning of the stamp.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
// Output and free memory
// header('Content-type: image/png');
// imagepng($im);
$filename_new = '../../gallery/black-white/'.$filename.'';
// if (move_uploaded_file(imagepng($im), '../../gallery/black-white/2' ))
imagepng($im, $filename_new);
imagedestroy($im);
}
Cette fonction particulière ne renvoie pas du tout "une image", elle renvoie une * ressource d'image * dont la taille est un peu difficile à mesurer. Où exactement transformez-vous cela en un fichier image mesurable? – deceze
La taille jpeg est non-déterministe. Vous ne pouvez pas dire exactement quelle sera la taille du fichier final, car cela dépend entièrement des paramètres de compression et de la structure de l'image elle-même. une image "bruyante" avec beaucoup de détails produira un fichier .jpg plus grand qu'une simple image avec de grandes zones de couleur "constante". Si votre nouvelle image est plus grande que l'original, vous avez utilisé un autre paramètre de qualité jpeg ou introduit plus de bruit. –
veuillez patienter. Je vais mettre à jour le post. @deceze – Diamond