У меня была такая же проблема после исправления 1.9.2.2 и 1.9.2.3. SUPEE-9767 добавляет расширенный метод проверки в
Приложение / код / ядро / Mage / Ядро / Модель / Файл / Оценщик / image.php
Мой был:
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.'));
}
И изменилось на:
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.'));
}
Похоже, проблема заключается в imagecopyresampled
вызове без предварительной настройки прозрачности, поскольку он объединяет черный фон по умолчанию imagecreatetruecolor
.
Я перешел imagecopyresampled
в оператор switch и добавил вызовы прозрачности ранее imagecopysampled
в случае png (вы также можете использовать его для gif).
Так что теперь мой if / switch выглядит так:
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;
}
Это сохраняло мою прозрачность png во время загрузки изображений товаров. Не знаю, поможет ли это с водяным знаком, и, очевидно, если вы его используете, скопируйте файл в локальную папку.
Приложение / код / местные / Mage / Ядро / Модель / Файл / Оценщик / image.php
Я попытался бы сохранить изображение снова (возможно, с другой программой). И если это не поможет, вы можете попробовать это:
Изменить:
Для того, чтобы:
Изменить:
Для того, чтобы:
Источник: https://www.gravitywell.co.uk/latest/how-to/posts/fixing-black-magento-adds-to-image-backgrounds/
Редактировать: это было исправлено в Magento 1.9.3.4 / SUPEE-9767 V2
Изменено с:
Для того, чтобы:
источник
Я создал модуль Magento в соответствии с ответом Тима Салливана, который исправляет эту проблему:
https://github.com/CopeX/PNGUploadFix
источник
У меня есть файл патча, который легко установить в корневую папку вашего magento.
URL: скачать отсюда
источник
Я обнаружил, что настройка файлов Image.php и GD2.php, как предложено в ответах выше, работает, но для меня это означало, что эскизы JPEG, которые не были полностью квадратными, внезапно имели черный фон. Так что в GD2.php я поменял
в
чтобы сохранить старую ситуацию для JPEG.
источник