Saya memiliki masalah yang sama setelah menambal 1.9.2.2 dan 1.9.2.3. SUPEE-9767 menambahkan metode validasi diperpanjang di
app / code / core / Mage / Core / Model / File / Validator / Image.php
Milik saya adalah:
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.'));
}
Dan diubah menjadi:
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.'));
}
Masalahnya tampaknya adalah imagecopyresampled
panggilan tanpa pengaturan transparansi terlebih dahulu karena menggabungkan latar belakang hitam default imagecreatetruecolor
.
Apa yang saya lakukan adalah pindah imagecopyresampled
ke pernyataan switch dan menambahkan panggilan transparansi sebelum imagecopysampled
dalam kasus png (Anda juga bisa menggunakannya untuk gif).
Jadi sekarang if / switch saya terlihat seperti ini:
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;
}
Ini menjaga transparansi png saya selama unggahan gambar produk. Jangan tahu apakah ini akan membantu dengan tanda air dan jelas jika Anda menggunakan ini salin file ke folder lokal Anda.
app / code / local / Mage / Core / Model / File / Validator / Image.php
Saya akan mencoba untuk menyimpan gambar lagi (mungkin dengan program lain). Dan jika itu tidak membantu Anda dapat mencoba ini:
Perubahan:
Untuk:
Perubahan:
Untuk:
Sumber: https://www.gravitywell.co.uk/latest/how-to/posts/fixing-black-magento-adds-to-image-backgrounds/
Sunting: ini telah diperbaiki di Magento 1.9.3.4 / SUPEE-9767 V2
Diubah dari:
Untuk:
sumber
Saya telah membuat modul Magento sesuai dengan jawaban Tim Sullivan yang memperbaiki masalah itu:
https://github.com/CopeX/PNGUploadFix
sumber
Saya telah membuat file tambalan dengan mudah menginstal pada folder root magento Anda.
URL: Unduh dari sini
sumber
Saya menemukan bahwa menyesuaikan file Image.php dan GD2.php seperti yang disarankan dalam jawaban di atas berfungsi, tetapi bagi saya itu berarti bahwa thumbnail JPEG yang tidak sepenuhnya persegi tiba-tiba memiliki latar belakang hitam. Jadi di GD2.php saya berubah
untuk
untuk menjaga situasi lama untuk JPEG.
sumber