पारदर्शी होने पर वॉटरमार्क काली पृष्ठभूमि प्राप्त करता है


23

मैंने अपने Magento 1.9.2.4 शॉप पर PATCH SUPEE 9767 स्थापित किया है।

अब मैंने एक नया वॉटरमार्क अपलोड किया है, लेकिन पृष्ठभूमि बदलकर काली हो गई है।

क्या नए अपडेट के बाद से यह समस्या है? अन्य मैगनेटो 1.9.2.4 इंस्टॉलेशन पर जहां अपडेट स्थापित नहीं है, वहां बैकग्राउंड अभी भी ट्रांसपेरेंट है।

जवाबों:


29

मेरे पास 1.9.2.2 और 1.9.2.3 के पैचिंग के बाद एक ही मुद्दा था। SUPEE-9767 में एक विस्तारित मान्य विधि जोड़ता है

एप्लिकेशन / कोड / कोर / दाना / कोर / मॉडल / फ़ाइल / सत्यापनकर्ता / 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स्विच स्टेटमेंट में चला गया और imagecopysampledपीएनजी मामले में पारदर्शिता कॉल को जोड़ने से पहले (आप इसे जीआईएफ के लिए भी इस्तेमाल कर सकते हैं)।

तो अब मेरी अगर / स्विच इस तरह दिखता है:

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 पारदर्शिता को बनाए रखा। पता है कि क्या यह वॉटरमार्क के साथ मदद करेगा और जाहिर है अगर आप इस फाइल का उपयोग अपने स्थानीय फ़ोल्डर में करते हैं।

एप्लिकेशन / कोड / स्थानीय / दाना / कोर / मॉडल / फ़ाइल / सत्यापनकर्ता / Image.php


क्या आप कृपया github.com/OpenMage/magento-lts पर कोई समस्या खोल सकते हैं ?
sv3n

आपने मुझे घंटों बचाया! धन्यवाद!
माइकल लीस

Btw, मेरी Image.php पर इसे लागू करने के बाद, छवि का अपलोडिंग "अपलोडिंग" के लिए अटक गया है। सदैव। O__O किसी को भी एक ही समस्या का सामना करना पड़ा?
जेहलूऊ

मैंने SUPEE-8788 पैच अनुभव के बिना 1.9.2.3 साइट देखी है, SUPEE-9767 के साथ पैच करने के बाद व्यवस्थापक अपलोड अपलोड करें।
टिम सुलिवन

1
@TimSullivan मैंने आपके समाधान की कोशिश की लेकिन मेरे लिए काम नहीं किया।
दीपक मनकोटिया

3

मैं छवि को फिर से सहेजने की कोशिश करूँगा (शायद दूसरे प्रोग्राम के साथ)। और अगर यह मदद नहीं करता है तो आप यह कोशिश कर सकते हैं:

एप्लिकेशन / कोड / स्थानीय / वेरिएन / छवि / एडाप्टर / 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 में तय किया गया है

एप्लिकेशन / कोड / कोर / दाना / कोर / मॉडल / फ़ाइल / सत्यापनकर्ता / 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;
    }

मैंने आपके दोनों समाधान की कोशिश की 1 अपरिभाषित चर की एक फेंकने की त्रुटि और दूसरा काम नहीं कर रहा है। मैं Magento 1.9.3.1
दीपक मनकोटिया

क्या आपने पूर्ण नवीनतम पैच SUPEE-9767 V2 लागू करने का प्रयास किया है?
sv3n

मैंने SUPEE-9767 V2 पैच लगाने की कोशिश की है
दीपक मनकोटिया

0

मैंने टिम सुलिवन के जवाब के अनुसार एक मैगनेटो मॉड्यूल बनाया है जो उस समस्या को हल करता है:

https://github.com/CopeX/PNGUploadFix


यहां कुछ कोड विवरण प्रदान करने का प्रयास करें, बल्कि केवल एक लिंक पोस्ट कर रहे हैं।
प्रियांक

@pointiA मैंने आपके मॉड्यूल की कोशिश की और मेरे लिए समस्या को ठीक नहीं किया
दीपक मनकोटिया


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}.");
        }
    }

जेपीईजी के लिए पुरानी स्थिति रखने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.