menatwork-ia / valumsFileUploader

Contao Extension :: Multiple file uploader without flash
http://www.contao.org/erweiterungsliste/view/valumsFileUploader.html
11 stars 3 forks source link

Bild Skalierungsproblem (Schwarzer Rand) - Siehe auch contao core issue #3806 #47

Closed AndreasA closed 12 years ago

AndreasA commented 12 years ago

Hallo,

das Problem, welches hier beschrieben wird. https://github.com/contao/core/issues/3806

tritt auch bei valumFileUploader auf - zumindest bei manchen Dateien.

Es betrifft schwarze Ränder beim resize von Bildern.

In der Pre-Version von contao 2.11.3 wurde das Problem mittlerweile behoben, allerdings selbst wenn man diesen Fix manuell in 2.11.2 einspielt, behebt dies nicht das Problem bei valumFileUploader.

Vermutlich, weil valumFileUploader einen eigenen Resize-Code bereit stellt.

Ich habe mir das einmal angeschaut und es sieht so aus als würde folgende Anpassung in ValumsFile.php (angelehnt an die Anpassung von Contao Core) das korrekte Resultat liefern:

public function resize($newFile, $arrResizeResolution = FALSE)
{
    $blnExceeds = false;
    $blnResized = false;

    // Resize image if necessary
    if (($arrImageSize = @getimagesize(TL_ROOT . '/' . $newFile)) !== false)
    {
        // Image is too big
        if ($arrImageSize[0] > $GLOBALS['TL_CONFIG']['gdMaxImgWidth'] || $arrImageSize[1] > $GLOBALS['TL_CONFIG']['gdMaxImgHeight'])
        {
            $blnExceeds = true;
        }
        else
        {
            if (is_array($arrResizeResolution))
            {
                $intImageWidth = $arrResizeResolution[0];
                $intImageHeigh = $arrResizeResolution[1];
            }
            else
            {
                $intImageWidth = $GLOBALS['TL_CONFIG']['imageWidth'];
                $intImageHeigh = $GLOBALS['TL_CONFIG']['imageHeight'];
            }

    $blnResizeNeeded = false;

    // The image exceeds the maximum image width
    if ($arrImageSize[0] > $intImageWidth)
    {
        $blnResizeNeeded = true;
        $intWidth = $intImageWidth;
        $intHeight = ceil($intImageWidth * $arrImageSize[1] / $arrImageSize[0]);
        $arrImageSize = array($intWidth, $intHeight);
    }

    // The image exceeds the maximum image height
    if ($arrImageSize[1] > $intImageHeigh)
    {
        $blnResizeNeeded = true;
        $intWidth = ceil($intImageHeigh * $arrImageSize[0] / $arrImageSize[1]);
        $intHeight = $intImageHeigh;
        $arrImageSize = array($intWidth, $intHeight);
    }

    if ($blnResizeNeeded)
    {
        $this->resizeImage($newFile, $arrImageSize[0], $arrImageSize[1]);
        $this->size = filesize(TL_ROOT . '/' . $newFile);

                // Recalculate image size
                    $arrImageSize = @getimagesize(TL_ROOT . '/' . $newFile);
        $blnResized = true;
    }
        }
    }

    return array(
        'blnExceeds' => $blnExceeds,
        'blnResized' => $blnResized
    );
}

P.S.: Gibt es für valumFileUploader eigentlich auch die Möglichkeit für eine Progressbar (bzw. kommt hier in Zukunft irgendwann etwas)? Es ist nicht so tragisch, da ich mit dem Status in Form Prozent Werten eh ganz glücklich bin, aber...

AndreasA commented 12 years ago

Hallo,

es gab mittlerweile eine kleine Änderung am "Core" bzgl. dieses Updates und zwar wird jetzt statt "ceil" bei den Berechnungen "round" verwendet, da es ansonsten unter gewissen Umständen passieren konnte, dass das Bild um einen Pixel größer als die Maximumangabe wurde.

Würde vorschlagen diese Änderungen auch beim valumsFileUploader zu übernehmen.

Näheres dazu gibt es hier: https://github.com/contao/core/commit/f7e0d22b39b3f81c914e6d96a99fa65646e8d7de

kahl-dev commented 12 years ago

Danke @AndreasA für diesen Report. Der Bug ist nun gefixed