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
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?
- kravčo
- Člen | 721
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
}