FriendsOfREDAXO/multiupload

Precompressor läuft unter "Medium hinzufügen/Datei austauschen" nicht korrekt

gut8er opened this issue · 3 comments

Hi Leute,

wenn ich im Redaxo 5.3.0 im Medienpool unter Multiupload bei aktiviertem precompressor ein Bild hochlade klappt alles wunderbar. Wenn ich aber ein JPEG über die "Medium hinzufügen" Funktion hochlade wird das Bild zwar auch resized, ich habe aber leider schwarze Ränder im Bild.

Als Browser verwende ich den aktuellen Chrome. Den Browser würde ich aber als Fehlerquelle ausschließen da es ja über den Multiupload wunderbar klappt.

gleiches Problem bei uns

Schade hier scheint es wohl noch keine Lösung zu geben. Ich habe mal etwas getestet aber leider nichts entdeckt :/

So long Story short... Ich habe jetzt in "redaxo/src/addons/multiupload/boot.php" die Zeilen "56 bis 68" einkommentiert. Somit ist Medium hinzufügen schonmal verschwunden. Und man wird automatisch weitergeleitet.

Für "Datei austauschen" im Medienpool war es ein ähnliches Problem. Hier habe ich in meinem eigenen Addon in meiner Klasse einfach die Funktion angepasst und in der boot.php von meinem Addon über ein Extension Point aufgerufen.

Bei "Datei austauschen" sind einfach nicht alle Parameter vorhanden. Anbei die Funktion die ich über den Extension Point aufrufe:

`
public function optimizeImageAtReplace($ep) {

    $params = $ep->getParams();
    $params['subject'] = $ep->getSubject();

    $scalable_mime_types = array('image/jpeg', 'image/jpg', 'image/pjpeg');
    $config = rex_plugin::get('multiupload', 'upload_precompressor')->getConfig();

    if (in_array($params['filetype'], $scalable_mime_types) && $params['ok']) {

        $iSize = getimagesize(rex_path::media() . $params['filename']);

        // check if image needs scaling
        if ($iSize[0] > $config['max_pixel'] || $iSize[1] > $config['max_pixel']) {

            self::pr($params);

            if ($iSize[0] > $iSize[1]) {
                $ratio = $config['max_pixel'] / $iSize[0];
            } else {
                $ratio = $config['max_pixel'] / $iSize[1];
            }

            $newwidth = round($iSize[0] * $ratio);
            $newheight = round($iSize[1] * $ratio);

            # load image
            $image = imagecreatetruecolor($newwidth, $newheight);
            $source = imagecreatefromjpeg(rex_path::media() . $params['filename']);

            # resize
            imagecopyresampled($image, $source, 0, 0, 0, 0, $newwidth, $newheight, $iSize[0], $iSize[1]);
            imagejpeg($image, rex_path::media() . $params['filename'], $config['jpg_quality']);

            # update media db
            $size = getimagesize(rex_path::media() . $params['filename']);
            $filesize = filesize(rex_path::media() . $params['filename']);

            $mediaSQL = rex_sql::factory();
            $mediaSQL->setDebug(FALSE);
            $mediaSQL->setTable(rex::getTable('media'));
            $mediaSQL->setWhere('filename="' . $params['filename'] . '"');
            $mediaSQL->setValue('filesize', $filesize);
            $mediaSQL->setValue('width', $size[0]);
            $mediaSQL->setValue('height', $size[1]);
            $mediaSQL->update();

            rex_media_manager::deleteCache($params['filename']);
        }
    }
    return $params;

}

`
Der Aufruf in meiner boot.php sieht wie folgt aus:

rex_extension::register('MEDIA_UPDATED', array('MeinKlassennameUnterLibInMeinemAddon', 'optimizeImageAtReplace'), rex_extension::EARLY);