J'ai eu le même problème après avoir appliqué les correctifs 1.9.2.2 et 1.9.2.3. SUPEE-9767 ajoute une méthode de validation étendue dans
app / code / core / Mage / Core / Model / File / Validator / Image.php
Le mien était:
public function validate($filePath)
{
$fileInfo = getimagesize($filePath);
if (is_array($fileInfo) and isset($fileInfo[2])) {
if ($this->isImageType($fileInfo[2])) {
return null;
}
}
throw Mage::exception('Mage_Core', Mage::helper('core')->__('Invalid MIME type.'));
}
Et changé en:
public function validate($filePath)
{
list($imageWidth, $imageHeight, $fileType) = getimagesize($filePath);
if ($fileType) {
if ($this->isImageType($fileType)) {
//replace tmp image with re-sampled copy to exclude images with malicious data
$image = imagecreatefromstring(file_get_contents($filePath));
if ($image !== false) {
$img = imagecreatetruecolor($imageWidth, $imageHeight);
imagecopyresampled($img, $image, 0, 0, 0, 0, $imageWidth, $imageHeight, $imageWidth, $imageHeight);
switch ($fileType) {
case IMAGETYPE_GIF:
imagegif($img, $filePath);
break;
case IMAGETYPE_JPEG:
imagejpeg($img, $filePath, 100);
break;
case IMAGETYPE_PNG:
imagepng($img, $filePath);
break;
default:
return;
}
imagedestroy($img);
imagedestroy($image);
return null;
} else {
throw Mage::exception('Mage_Core', Mage::helper('core')->__('Invalid image.'));
}
}
}
throw Mage::exception('Mage_Core', Mage::helper('core')->__('Invalid MIME type.'));
}
Le problème semble être l' imagecopyresampled
appel sans définir d'abord la transparence car il fusionne le fond noir par défaut de imagecreatetruecolor
.
Ce que j'ai fait était de passer imagecopyresampled
dans l'instruction switch et d'ajouter les appels de transparence avant imagecopysampled
dans le cas png (vous pouvez également l'utiliser pour gif).
Alors maintenant, mon if / switch ressemble à ceci:
if ($image !== false) {
$img = imagecreatetruecolor($imageWidth, $imageHeight);
switch ($fileType) {
case IMAGETYPE_GIF:
imagecopyresampled($img, $image, 0, 0, 0, 0, $imageWidth, $imageHeight, $imageWidth, $imageHeight);
imagegif($img, $filePath);
break;
case IMAGETYPE_JPEG:
imagecopyresampled($img, $image, 0, 0, 0, 0, $imageWidth, $imageHeight, $imageWidth, $imageHeight);
imagejpeg($img, $filePath, 100);
break;
case IMAGETYPE_PNG:
imagecolortransparent($img, imagecolorallocatealpha($img, 0, 0, 0, 127));
imagealphablending($img, false);
imagesavealpha($img, true);
imagecopyresampled($img, $image, 0, 0, 0, 0, $imageWidth, $imageHeight, $imageWidth, $imageHeight);
imagepng($img, $filePath);
break;
default:
return;
}
imagedestroy($img);
imagedestroy($image);
return null;
}
Cela a gardé ma transparence png pendant les téléchargements d'images de produits. Je ne sais pas si cela vous aidera avec le filigrane et, évidemment, si vous l'utilisez, copiez le fichier dans votre dossier local.
app / code / local / Mage / Core / Model / File / Validator / Image.php
J'essaierais de sauvegarder à nouveau l'image (peut-être avec un autre programme). Et si cela ne vous aide pas, vous pouvez essayer ceci:
Changement:
À:
Changement:
À:
Source: https://www.gravitywell.co.uk/latest/how-to/posts/fixing-black-magento-adds-to-image-backgrounds/
Edit: cela a été corrigé dans Magento 1.9.3.4 / SUPEE-9767 V2
Changé de:
À:
la source
J'ai créé un module Magento selon la réponse de Tim Sullivan qui corrige ce problème:
https://github.com/CopeX/PNGUploadFix
la source
J'ai créé un fichier de correctif à installer facilement sur votre dossier racine magento.
URL: Téléchargez ici
la source
J'ai trouvé que l'ajustement des fichiers Image.php et GD2.php comme suggéré dans les réponses ci-dessus fonctionne, mais pour moi, cela signifiait que les miniatures JPEG qui n'étaient pas complètement carrées avaient soudainement un arrière-plan noir. Donc, dans GD2.php, j'ai changé
à
afin de conserver l'ancienne situation pour les JPEG.
la source