Filigran şeffaf olduğunda siyah arka plan olsun


23

PATCH SUPEE 9767'yi magento 1.9.2.4 mağazama kurdum.

Şimdi yeni bir Filigran yükledim ancak arka plan siyah olarak değişiyor.

Yeni güncellemeden beri bu bir sorun mu? Güncellemenin kurulmadığı bir magento 1.9.2.4 kurulumunda, arka plan hala şeffaf.

Yanıtlar:


29

1.9.2.2 ve 1.9.2.3 eklerinden sonra da aynı sorunu yaşadım. SUPEE-9767’de genişletilmiş bir doğrulama yöntemi ekler

Uygulama / kod / çekirdek / Mage / çekirdek / Model / Dosya / Doğrulayıcı / image.php

Benimki:

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

Ve olarak değiştirildi:

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

Sorun imagecopyresampled, varsayılan olarak siyah arka planı birleştirirken, ilk önce saydamlığı ayarlamadan çağrı gibi görünüyor imagecreatetruecolor.

Yaptığım şey, imagecopyresampledswitch deyimine geçmek ve imagecopysampledpng durumunda daha önce yapılan saydamlık çağrılarını eklemekti (ayrıca, gif için de kullanabilirsiniz).

Şimdi benim if / switch'im şuna benziyor:

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

Bu, ürün resmi yüklemeleri sırasında png şeffaflığımı korudu. Bunun filigranla ilgili olup olmayacağını bilmiyorum ve açık bir şekilde bunu kullanıyorsanız dosyayı yerel klasörünüze kopyalayın.

Uygulamanın / kod / yerel / Büyücü / Çekirdek / Model / Dosya / Doğrulayıcı / image.php


Lütfen bir sorunu github.com/OpenMage/magento-lts adresinde açabilir misiniz?
sv3n

Beni saatlerce kurtardın! Teşekkürler!
Michael Leiss

BTW, bunu Image.php dosyama uyguladıktan sonra, resmin yüklenmesi "Yükleme" ye sıkışmış gibi görünüyor. Sonsuza dek. O__O Herkes aynı problemle karşılaştı mı?
jehzlau

SUPEE-9767 ile yama yaptıktan sonra SUPEE-8788 düzeltme eki deneyimi yönetici yükleme sorunları olmadan 1.9.2.3 bir site gördüm.
Tim Sullivan,

1
@ TimSullivan Çözümünüzü denedim, ancak benim için işe yaramadı.
Deepak Mankotia

3

Görüntüyü tekrar kaydetmeyi denerdim (belki başka bir programla). Ve yardım etmezse şunu deneyebilirsiniz:

app / code / local / Varien / Image / Adapter / Gd2.php ve /lib/Varien/Image/Adapter/Gd2.php içeriğini kopyalayın

Değişiklik:

$this->_fillBackgroundColor($newImage);

Kime:

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

Değişiklik:

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

Kime:

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

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


Düzenleme: bu Magento 1.9.3.4 / SUPEE-9767 V2’de düzeltildi

Uygulama / kod / çekirdek / Mage / çekirdek / Model / Dosya / Doğrulayıcı / image.php

Tarafından değiştirildi:

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

Kime:

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

Her iki çözümünüzü de denedim, birincisi tanımsız değişken atma hatası ve ikincisi çalışmıyor. Magento kullanıyorum 1.9.3.1
Deepak Mankotia

En son SUPEE-9767 V2 yamasını uygulamaya çalıştınız mı?
sv3n

SUPEE-9767 V2 yamasını uyguladıktan sonra denedim
Deepak Mankotia 11



0

Image.php ve GD2.php dosyalarını yukarıdaki cevaplarda önerildiği gibi ayarlamanın işe yaradığını buldum, ancak benim için tamamen kare olmayan JPEG küçük resimlerinin aniden siyah arka planlara sahip olduğu anlamına geliyordu. Yani GD2.php de değiştim

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

için

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'lerin eski durumunu korumak için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.