Tuve el mismo problema después de parchear 1.9.2.2 y 1.9.2.3. SUPEE-9767 agrega un método de validación extendido en
app / code / core / Mage / Core / Model / File / Validator / Image.php
La mía fue:
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.'));
}
Y cambiado a:
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.'));
}
El problema parece ser la imagecopyresampled
llamada sin establecer primero la transparencia, ya que combina el fondo negro predeterminado de imagecreatetruecolor
.
Lo que hice fue pasar imagecopyresampled
a la declaración de cambio y agregar las llamadas de transparencia antes imagecopysampled
en el caso de png (también puede usarlo para gif).
Entonces ahora mi if / switch se ve así:
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;
}
Esto mantuvo mi transparencia png durante la carga de imágenes del producto. No sé si esto ayudará con la marca de agua y, obviamente, si usa esto, copie el archivo en su carpeta local.
app / code / local / Mage / Core / Model / File / Validator / Image.php
Intentaría guardar la imagen nuevamente (tal vez con otro programa). Y si no ayuda, puede intentar esto:
Cambio:
A:
Cambio:
A:
Fuente: https://www.gravitywell.co.uk/latest/how-to/posts/fixing-black-magento-adds-to-image-backgrounds/
Editar: esto se ha solucionado en Magento 1.9.3.4 / SUPEE-9767 V2
Cambiaron desde:
A:
fuente
He creado un módulo Magento según la respuesta de Tim Sullivan que soluciona ese problema:
https://github.com/CopeX/PNGUploadFix
fuente
He creado un archivo de parche que se instala fácilmente en su carpeta raíz de magento.
URL: Descargar desde aquí
fuente
Descubrí que ajustar los archivos Image.php y GD2.php como se sugiere en las respuestas anteriores funciona, pero para mí significaba que las miniaturas JPEG que no estaban completamente cuadradas de repente tenían fondos negros. Entonces en GD2.php cambié
a
para mantener la antigua situación de los archivos JPEG.
fuente