워터 마크가 투명 할 때 검은 배경을 얻습니다


23

magento 1.9.2.4 상점에 PATCH SUPEE 9767을 설치했습니다.

이제 새 워터 마크를 업로드했지만 배경이 검은 색으로 바뀝니다.

새 업데이트 이후로 문제가됩니까? 업데이트가 설치되지 않은 다른 magento 1.9.2.4 설치에서는 백그라운드가 여전히 투명합니다.

답변:


29

1.9.2.2 및 1.9.2.3 패치 후 동일한 문제가 발생했습니다. SUPEE-9767은 확장 검증 방법을 다음에 추가합니다.

app / code / core / Mage / Core / Model / File / Validator / 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.

내가 한 것은 png imagecopyresampled문에서 switch 문 으로 이동 하여 투명성 호출을 추가하는 imagecopysampled것입니다 (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 투명도를 유지했습니다. 이것이 워터 마크에 도움이 될지 모르고 분명히 이것을 사용하면 파일을 로컬 폴더에 복사하십시오.

app / code / local / Mage / Core / Model / File / Validator / Image.php


github.com/OpenMage/magento-lts 에서 문제를 열 ​​수 있습니까 ?
sv3n

당신은 저에게 시간을 절약했습니다! 고마워!
Michael Leiss

Btw, 이것을 Image.php에 적용한 후 이미지 업로드가 "업로드"에 붙어있는 것 같습니다. 영원히. O__O 누구나 같은 문제가 발생 했습니까?
jehzlau

SUPEE-9767으로 패치 한 후 SUPEE-8788 패치 경험이없는 관리자 업로드 문제가없는 1.9.2.3 사이트를 보았습니다.
Tim Sullivan

1
@ TimSullivan 나는 당신의 솔루션을 시도했지만 나에게 효과가 없었습니다.
Deepak Mankotia

3

이미지를 다시 저장하려고합니다 (다른 프로그램과 함께). 도움이되지 않으면 다음을 시도하십시오.

app / code / local / Varien / Image / Adapter / Gd2.php 및 /lib/Varien/Image/Adapter/Gd2.php의 내용을 복사

변화:

$this->_fillBackgroundColor($newImage);

에:

$this->_fillBackgroundColor($newImage, $frameWidth, $frameHeight);

변화:

if (!imagefill($imageResourceTo, 0, 0, $color)) {

에:

if (!imagefilledrectangle($imageResourceTo, 0, 0, $w, $h, $color)) {

출처 : https://www.gravitywell.co.uk/latest/how-to/posts/fixing-black-magento-adds-to-image-backgrounds/


편집 : 이것은 Magento 1.9.3.4 / SUPEE-9767 V2에서 수정되었습니다.

app / code / core / Mage / Core / Model / File / Validator / Image.php

에서 변경 :

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;
    }

에:

if ($image !== false) {
    $img = imagecreatetruecolor($imageWidth, $imageHeight);
    imagealphablending($img, false);
    imagecopyresampled($img, $image, 0, 0, 0, 0, $imageWidth, $imageHeight, $imageWidth, $imageHeight);
    imagesavealpha($img, true);

    switch ($fileType) {
         case IMAGETYPE_GIF:
            $transparencyIndex = imagecolortransparent($image);
            if ($transparencyIndex >= 0) {
                imagecolortransparent($img, $transparencyIndex);
                for ($y = 0; $y < $imageHeight; ++$y) {
                    for ($x = 0; $x < $imageWidth; ++$x) {
                        if (((imagecolorat($img, $x, $y) >> 24) & 0x7F)) {
                            imagesetpixel($img, $x, $y, $transparencyIndex);
                        }
                    }
                }
            }
            if (!imageistruecolor($image)) {
                imagetruecolortopalette($img, false, imagecolorstotal($image));
            }
            imagegif($img, $filePath);
            break;
        case IMAGETYPE_JPEG:
            imagejpeg($img, $filePath, 100);
            break;
        case IMAGETYPE_PNG:
            imagepng($img, $filePath);
            break;
        default:
            break;
    }

정의되지 않은 변수의 첫 번째 오류가 발생하고 두 번째 솔루션이 작동하지 않습니다. 저는 magento 1.9.3.1을 사용하고 있습니다
Deepak Mankotia

최신 패치 SUPEE-9767 V2를 적용하려고 했습니까?
sv3n

SUPEE-9767 V2 패치
Deepak Mankotia를



0

위의 답변에서 제안한대로 Image.php 및 GD2.php 파일을 조정하면 효과가 있지만 완전히 정사각형이 아닌 JPEG 썸네일이 갑자기 검은 배경을 가지고 있다는 것을 알았습니다. 그래서 GD2.php에서 나는 바꿨다.

if (!imagefilledrectangle($imageResourceTo, 0, 0, $w, $h, $color)) {
            throw new Exception("Failed to fill image background with color {$r} {$g} {$b}.");
        }

if($this->_fileType == IMAGETYPE_JPEG){
        if (!imagefill($imageResourceTo, 0, 0, $color)) {
            throw new Exception("Failed to fill image background with color {$r} {$g} {$b}.");
        }
    } else {
        if (!imagefilledrectangle($imageResourceTo, 0, 0, $w, $h, $color)) {
            throw new Exception("Failed to fill image background with color {$r} {$g} {$b}.");
        }
    }

JPEG의 오래된 상황을 유지하기 위해.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.