nette image a jeho komprese

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lampa
Člen | 9
+
0
-

ahoj,
udelal jsem pro jednoho grafika takovy jednoduchy formular na pridavani obrazku do jeho portfolia.
stezuje si ale na to, ze vlozenej obrazek ma moc velkou kompresi. vklada tam jpeg a vystup je taky jpeg. s obrazkem nijak nemanipuluju, nemenim rozmery ani nic.

$values = $form->getValues();
$image = $values['file']->toImage();
$image->save($url);

nevite nekdo proc to tak je a jak to zmenit?

natrim
Člen | 73
+
0
-

nastav $quality u save na 100 (default je totiz 85)

druhej parametr save

Editoval natrim (17. 12. 2010 18:30)

kravčo
Člen | 721
+
0
-

Rovnakú zlobu spraví aj jednoduché

$img = Nette\Image::fromFile('c:\image1.jpg');
$img->save('c:\image2.jpg');

Problémom je dvojitá konverzia: JPG → GD a GD → JPG, čím pochopiteľne utrpí kvalita.

Riešením je ukladať obrázok bez zbytočných konverzií… V tomto prípade je konverzia ->toImage() aj tak úplne zbytočný overhead.

if ($value['file']->isImage()) {
    try {
        $values['file']->move($url);
    } catch (\InvalidStateException $e) {
        // presun súboru zlyhal
    }
} else {
    // neplatný obrázok
}
kravčo
Člen | 721
+
0
-

natrim napsal(a):

nastav $quality u save na 100 (default je totiz 85)

druhej parametr save

To akurát obrázok niekoľkonásobne zväčší pri miernom znížení kvality za cenu využitia veľa pamäte :)