Imagemanager::resizeImage

Das Forum ist für das Melden von Bugs gedacht. // This forum is intended to report bugs with the APF.
Gesperrt
welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Imagemanager::resizeImage

Beitrag von welworx » 01.05.2013, 16:11:15

hey leute,

hab mir grad die resizeImage funktion angesehen und festgestellt, dass der teil in dem das bild schlussendlich gespeichert wird keinen sinn ergibt da die ausgabefunktion in abhängigkeit des eingabebildes und nicht des zielbildes gewählt wird.

Code: Alles auswählen

 // save image (if desired) or flush it to stdout
        if ($sourceImageType == 'jpg') {
            if ($targetImage === null) {
                imagejpeg($targetImageStream, '', $jpgQuality);
            } else {
                imagejpeg($targetImageStream, $targetImage, $jpgQuality);
            }
        } elseif ($sourceImageType == 'gif') {
            if ($targetImage === null) {
                imagegif($targetImageStream);
            } else {
                imagegif($targetImageStream, $targetImage);
            }
        } else {
            if ($targetImage === null) {
                imagepng($targetImageStream);
            } else {
                imagepng($targetImageStream, $targetImage);
            }
        }
weiters fehlt die option pngCompression.

hab beides korrigiert. bitte die funktion ersetzten und einchecken:

Code: Alles auswählen

/**
     * @public
     * @static
     *
     * Resizes an image to the given dimensions. If a target image is given, the file is saved to
     * the desired file.
     *
     * @param string $sourceImage full qualified path to the image file.
     * @param int $width width of the resized image.
     * @param int $height height of the resized image.
     * @param string $targetImage full qualified path to the target image.
     * @param int $jpgQuality the jpg quality (0-100).
     * @param int $pngCompression the png compression level (0-9).
     * @throws InvalidArgumentException In case the applied image does not exist.
     *
     * @author Christian Achatz
     * @version
     * Version 0.1, 31.01.2009<br />
     * Version 0.2, 01.05.2013 (Werner Liemberger: added pngCompression and bugfix of the way the target image is saved.
     */
    static function resizeImage($sourceImage, $width, $height, $targetImage = null, $jpgQuality = 80,  $pngCompression=0) {
        // check if the image is present on disk
        if (!file_exists($sourceImage)) {
            throw new InvalidArgumentException('[ImageManager::resizeImage()] The given image ("'
                    . $sourceImage . '") does not exist! Hence, it cannot be resized.', E_USER_ERROR);
        }

        // gather the current dimensions of the image
        $attributes = ImageManager::getImageAttributes($sourceImage);
        $sourceImageWidth = $attributes['width'];
        $sourceImageHeight = $attributes['height'];
        $sourceImageType = $attributes['type'];

        // create the current and the target image stream
        if ($sourceImageType == 'jpg') {
            $sourceImageStream = imagecreatefromjpeg($sourceImage);
            $targetImageStream = imagecreatetruecolor($width, $height);
        } elseif ($sourceImageType == 'gif') {
            $sourceImageStream = imagecreatefromgif($sourceImage);
            $targetImageStream = imagecreate($width, $height);
        } else {
            $sourceImageStream = imagecreatefrompng($sourceImage);
            $targetImageStream = imagecreate($width, $height);
        }

        // copy transparency if we resize a gif image
        if ($sourceImageType == 'gif') {

            // query the transparency color
            $transparentColor = imagecolortransparent($sourceImageStream);

            // copy palette
            imagepalettecopy($targetImageStream, $sourceImageStream);

            // fill with transparent color
            imagefill($targetImageStream, 0, 0, $transparentColor);

            // declare the transparent color as transparent :)
            imagecolortransparent($targetImageStream, $transparentColor);
        }

        // copy source image stream to target image stream and resize it
        imagecopyresized($targetImageStream, $sourceImageStream, 0, 0, 0, 0, $width, $height, $sourceImageWidth, $sourceImageHeight);

        if ($targetImage!==null) {
            /*
             * get image type. The targetimage won't exist befor the opertaion,
             * therefore the getimagesize() function from getImageAttributes
             * produces a Read error. Thats the reason why the image type is
             */
            $fileNamePartsArray=explode('.', $targetImage);
            $targetImageType=end($fileNamePartsArray);
            $targetImageType = strtolower($targetImageType);
            
            //sometimes the file extensionname is written with an e
            $targetImageType=str_replace('jpeg', 'jpg', $targetImageType);

            switch ($targetImageType) {
                case 'jpg':
                    imagejpeg($targetImageStream, $targetImage, $jpgQuality);
                    break;
                case 'gif':
                    imagegif($targetImageStream, $targetImage);
                    break;
                case 'png':
                    imagepng($targetImageStream, $targetImage,$pngCompression);
                    break;
                default:
                    throw new Exception('[ImageManager::resizeImage()] The targetImage extension ("'
                    . $targetImageType . '") has to be jpg, png or gif', E_USER_ERROR);
            }
        } else {
            switch ($sourceImageType) {
                case 'jpg':
                    imagejpeg($targetImageStream, '', $jpgQuality);
                    break;
                case 'gif':
                    imagegif($targetImageStream, '');
                    break;
                default:
                    imagepng($targetImageStream, '',$pngCompression);
            }
        }

        // clean memory
        imagedestroy($targetImageStream);
        imagedestroy($sourceImageStream);
    }
 
zusätzlich habe ich das ganze mit der switch funktion geschrieben da ich in Erinnerung hab das die schneller sein soll als viele if elseif usw ..

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Imagemanager::resizeImage

Beitrag von dr.e. » 01.05.2013, 23:11:44

Danke für's finden und fixen. Checke die Änderung morgen ins SVN ein.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Imagemanager::resizeImage

Beitrag von dr.e. » 16.05.2013, 23:22:45

Sorry, bin noch nicht dazu gekommen. :( Kümmere mich am Samstag darum.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Imagemanager::resizeImage

Beitrag von dr.e. » 17.05.2013, 22:07:52

Hallo Werner,

ich habe deine Änderung in den 2.0er Branch mit ein paar kleinen Änderungen eingecheckt: http://sourceforge.net/p/adventurephpfr ... /php5/2.0/. Danke für deine Arbeit! :)
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast