Diskuze: Komprese obrázků
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ušetříš pár megabajtů, ale bez větší optimalizace (cachování)
budeš muset pro každý request ten stejný obrázek
komprimovat znovu a znovu. To je zbytečné a zdegraduješ už tak pomalé PHP.
Pokud používáš cache, tak sice nebude komprimovat pokaždé, ale zase ti to
zabere ty MB
Já být tebou to ukládám do databáze nebo někam do složky a jednou za čas
bych to projel CRONem a promazal to.
Obrázky jsou uloženy na serveru, udaje k němu v dtb. Nicméně mě jde o to, že se načítají až moc zmenšené obrázky pomocí CSS, což PageSpeedu vadí. Radí mi kompresi, jde to teda provést nějak efektivně?
Promazávat žádné obrázky nikdy nechci, články nejsou na bázi zpráv ale článků, které mohou lidi využít dnes nebo klidně za deset let, obrázek k tomu proto chci zachovat.
Jak jsem řekl. Budeš mít obrázky uloženy stejně, jako je tomu teď.
Plus si pro obrázky na homepage vytvoříš separátní složku nebo sloupec v
databázi, kde budeš mít komprimované verze obrázků. Předpokládám, že
se obrázky na homepage nebudou vyskytovat moc dlouho, takže by bylo dobré
tuto složku (se zmenšenými obrázky) jednou za čas promáznout.
Příjde mi to jako nejefektivnější řešení.
Jak radí patrik.valkovic, také bych to řešil stejným způsobem. Přijde mi hloupost v tomto případě provádět opakovanou kompresy při každém requestu.
Zachoval bych obrázek v originální velikosti a vytvořil k tomu náhled, který se zmenší a provedl bych zároveň i kompresy a tím se dostaneš na několik desítek KB.
Tak jsem si na to po delší době sedl, ale nedaří se :/
Rovnou ukážu asi kod. Na MVC architektuře v kontroleru se už dostanu na uložení obrázku, tak rovnou tam přidám i onu kompresi:
if(move_uploaded_file($_FILES['file']['tmp_name'], $dir)){
$this->compress_image($_FILES['file'],$_FILES['file']['tmp_name'], $dir.'.jpg', 65);
funkce je potom v kontroleru, ze kterého dědí ten, který zpracovává obrázky. Funkce komprese (několikrát zminovaná ruzně na netu)
public function compress_image($info,$source_url, $destination_url, $quality) {
if ($info['type'] == 'image/jpeg')
$image = imagecreatefromjpeg($source_url);
elseif ($info['type'] == 'image/gif')
$image = imagecreatefromgif($source_url);
elseif ($info['type'] == 'image/png')
$image = imagecreatefrompng($source_url);
imagejpeg($image, $destination_url, $quality);
return $destination_url;
}
Když to odešlu, obrázek původní se sice uloží, komprimovaný (který by se jmenoval obrazek.jpg.jpg) ale už nikoliv. Předtím vyhodí PHP chybové hlášení, po jehož refreshi se vrátím zpět do adminu. Hláška je taková:
Warning: imagecreatefromjpeg(/data/web/virtuals/136924/virtual/tmp/phpspj4lh): failed to open stream: No such file or directory in /data/web/virtuals/136924/virtual/www/subdom/admin/kontrolery/Kontroler.php on line 129
Warning: imagejpeg() expects parameter 1 to be resource, boolean given in /data/web/virtuals/136924/virtual/www/subdom/admin/kontrolery/Kontroler.php on line 137
Nějaké rady, prosím? Fakt nevím, co dělám špatně. Ta funkce na internetu je odsud http://blog.clonesinfo.com/…ng-php-code/
Předem díky!
Zobrazeno 6 zpráv z 6.