স্বচ্ছ হলে ওয়াটারমার্ক কালো পটভূমি পান


23

আমি আমার ম্যাজেন্টো 1.9.2.4 দোকানে প্যাচ সুপারি 9767 ইনস্টল করেছি।

এখন আমি একটি নতুন ওয়াটারমার্ক আপলোড করেছি তবে পটভূমিটি কালো হয়ে গেছে।

নতুন আপডেটের পর থেকে এটি কি সমস্যা? অন্য ম্যাজেন্টো ১.৯.২.৪ ইনস্টলেশনতে যেখানে আপডেট ইনস্টল করা হয়নি সেখানে ব্যাকগ্রাউন্ডটি এখনও ট্রান্সপারেন্ট রয়েছে।

উত্তর:


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

পণ্য চিত্র আপলোডের সময় এটি আমার পিএনজি স্বচ্ছতা বজায় রেখেছিল। এটি যদি জলছবিতে সহায়তা করে এবং আপনি যদি নিজের ফোল্ডারটি স্থানীয় ফোল্ডারে ব্যবহার করেন তবে অবশ্যই তা জানেন না।

অ্যাপ্লিকেশন / কোড / স্থানীয় / পুরোনো যাদুকর / কোর / মডেল / ফাইল / ভ্যালিডেটার / Image.php


আপনি কি দয়া করে github.com/OpenMage/magento-lts এ কোনও সমস্যা খুলতে পারেন ?
এসভি 3 ই

তুমি আমাকে ঘন্টা বাঁচিয়েছ! ধন্যবাদ!
মাইকেল লিস

বিটিডব্লিউ, এটি আমার চিত্র.এফপি এ প্রয়োগ করার পরে, চিত্রটির আপলোড "আপলোডিং" -কে আটকে গেছে বলে মনে হচ্ছে। চিরতরে. O__O কেউ একই সমস্যার মুখোমুখি?
jehzlau

আমি SUPEE-8788 প্যাচ অভিজ্ঞতা অ্যাডমিন ছাড়াই একটি 1.9.2.3 সাইট দেখেছি SUPEE-9767 দিয়ে প্যাচ করার পরে সমস্যাগুলি আপলোড করুন।
টিম সুলিভান

1
@ টিমসুলিভান আমি আপনার সমাধানটি চেষ্টা করেছি কিন্তু আমার পক্ষে কার্যকর হয়নি।
দীপক মানকোটিয়া

3

আমি আবার ছবিটি সংরক্ষণ করার চেষ্টা করব (সম্ভবত অন্য কোনও প্রোগ্রামার সহ)। এবং যদি এটি সহায়তা না করে তবে আপনি এটি চেষ্টা করতে পারেন:

অ্যাপ্লিকেশন / কোড / স্থানীয় / ভেরেইন / চিত্র / অ্যাডাপ্টার / জিডি 2.পিএফপি এবং / লিবি / ভারিএন / ইমেজ / অ্যাডাপ্টার / জিডি 2.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 ম প্রথম এক অপরিশোধিত ভেরিয়েবলের ত্রুটি এবং দ্বিতীয়টি কাজ করছে না। আমি ম্যাজেন্টোটি ব্যবহার করছি 1.9.3.1
দীপক মানকোটিয়া

আপনি কি সর্বশেষ প্যাচ SUPEE-9767 V2 প্রয়োগ করার চেষ্টা করেছেন?
এসভি

আমি SUPEE-9767 ভি 2 প্যাচ প্রয়োগের পরে চেষ্টা করেছি
দীপক মানকোটিয়া

0

আমি টিম সুলিভানের উত্তর অনুসারে একটি ম্যাজেন্টো মডিউল তৈরি করেছি যা এই সমস্যার সমাধান করে:

https://github.com/CopeX/PNGUploadFix


এখানে কেবলমাত্র একটি লিঙ্ক পোস্ট করার পরে কিছু কোড বিশদ সরবরাহ করার চেষ্টা করুন।
প্রিয়ঙ্ক

@ পয়েন্টটিএ আমি আপনার মডিউলটি চেষ্টা করেছিলাম এবং আমার জন্য সমস্যাটি সমাধান করেনি
দীপক মানকোটিয়া


0

আমি দেখতে পেয়েছি যে উপরের উত্তরগুলিতে প্রস্তাবিত ফাইলগুলি Image.php এবং GD2.php সামঞ্জস্য করা কাজ করে তবে আমার জন্য এর অর্থ হ'ল যে জেপিইজি থাম্বনেইলগুলি সম্পূর্ণ বর্গক্ষেত্র ছিল না হঠাৎ কালো পটভূমি ছিল। সুতরাং 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}.");
        }
    }

জেপিইগির পুরানো পরিস্থিতি ধরে রাখতে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.