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
Ich würde versuchen, das Bild erneut zu speichern (möglicherweise mit einem anderen Programm). Und wenn es nicht hilft, können Sie dies versuchen:
Veränderung:
Zu:
Veränderung:
Zu:
Quelle: https://www.gravitywell.co.uk/latest/how-to/posts/fixing-black-magento-adds-to-image-backgrounds/
Bearbeiten: Dies wurde in Magento 1.9.3.4 / SUPEE-9767 V2 behoben
Gewechselt von:
Zu:
quelle
Ich habe ein Magento-Modul gemäß der Antwort von Tim Sullivan erstellt, das dieses Problem behebt:
https://github.com/CopeX/PNGUploadFix
quelle
Ich habe eine Patch-Datei erstellt, die sich einfach in Ihrem Magento-Root-Ordner installieren lässt.
URL: Hier herunterladen
quelle
Ich fand, dass das Anpassen der Dateien Image.php und GD2.php wie in den obigen Antworten vorgeschlagen funktioniert, aber für mich bedeutete dies, dass JPEG-Miniaturansichten, die nicht vollständig quadratisch waren, plötzlich einen schwarzen Hintergrund hatten. Also habe ich mich in GD2.php geändert
zu
um die alte Situation für JPEG's zu behalten.
quelle