Ich hatte das gleiche Problem nach dem Patchen von 1.9.2.2 und 1.9.2.3. SUPEE-9767 fügt eine erweiterte Validierungsmethode hinzu
app / code / core / Mage / Core / Modell / Datei / Validator / Image.php
Meins war:
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.'));
}
Und geändert zu:
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.'));
}
Das Problem scheint der imagecopyresampled
Anruf zu sein, bei dem zunächst keine Transparenz festgelegt wird, da der standardmäßige schwarze Hintergrund von zusammengeführt wird imagecreatetruecolor
.
Was ich getan habe, war, imagecopyresampled
in die switch-Anweisung zu wechseln und die Transparenzaufrufe vorher imagecopysampled
in den png-Fall einzufügen (Sie können sie auch für gif verwenden).
So, jetzt sieht mein if / switch so aus:
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;
}
Dadurch blieb meine PNG-Transparenz beim Hochladen von Produktbildern erhalten. Ich weiß nicht, ob dies mit dem Wasserzeichen helfen wird und natürlich, wenn Sie dies tun, kopieren Sie die Datei in Ihren lokalen Ordner.
app / code / local / Mage / Core / Model / File / Validator / Image.php