sergeevizh Posted April 29, 2021 Report Share Posted April 29, 2021 (edited) 2 минуты назад, get31 сказал: в линии 38 у меня как раз: $info = getimagesize($resized_filename); но папка точно есть, т.к без добавления webp все работает Дальше смотрим в api/Design.php, api/Image.php и в .htaccess, где конфликт resized_filename Edited April 29, 2021 by alexivchenko Quote Link to post Share on other sites
get31 Posted April 29, 2021 Report Share Posted April 29, 2021 (edited) 30 минут назад, alexivchenko сказал: Дальше смотрим в api/Design.php, api/Image.php и в .htaccess, где конфликт resized_filename У меня стоит вот так: Design.php public function resize_modifier($filename, $width=0, $height=0, $set_watermark=false) { $resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark); $resized_filename_encoded = $resized_filename; $size = ($width?$width:0).'x'.($height?$height:0).($set_watermark?"w":''); $image_sizes = array(); if($this->settings->image_sizes) $image_sizes = explode('|',$this->settings->image_sizes); if(!in_array($size, $image_sizes)){ $image_sizes[] = $size; $this->settings->image_sizes = implode('|',$image_sizes); } if(substr($resized_filename_encoded, 0, 7) == 'http://') $resized_filename_encoded = rawurlencode($resized_filename_encoded); $resized_filename_encoded = rawurlencode($resized_filename_encoded); return $this->config->root_url.'/'.$this->config->resized_images_dir.$resized_filename_encoded/*.'?'.$this->config->token($resized_filename)*/; } Image.php public function add_resize_params($filename, $width=0, $height=0, $set_watermark=false) { if('.' != ($dirname = pathinfo($filename, PATHINFO_DIRNAME))) $file = $dirname.'/'.pathinfo($filename, PATHINFO_FILENAME); else $file = pathinfo($filename, PATHINFO_FILENAME); $ext = pathinfo($filename, PATHINFO_EXTENSION); if($width>0 || $height>0) $resized_filename = $file.'.'.($width>0?$width:'').'x'.($height>0?$height:'').($set_watermark?'w':'').'.'.$ext; else $resized_filename = $file.'.'.($set_watermark?'w.':'').$ext; return $resized_filename; } .htaccess - resized_filename вообще нет resize/resize.php <?php chdir('..'); require_once('api/Simpla.php'); $filename = $_GET['file']; $token = $_GET['token']; $filename = str_replace('%2F', '/', $filename); //if(substr($filename, 0, 6) == 'http:/') // $filename = 'http://'.substr($filename, 6); $simpla = new Simpla(); //if(!$simpla->config->check_token($filename, $token)) //exit('bad token'); $resized_filename = $simpla->image->resize($filename); //if(is_readable($resized_filename)) // header('Location: '.$_SERVER['REQUEST_URI']); if(is_readable($resized_filename)) { header('Content-type: image'); print file_get_contents($resized_filename); } $webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp"; $info = getimagesize($resized_filename); if (file_exists($webp_filename)) { } else { if ($info['mime'] == 'image/jpeg') { $imagetoconvert = imagecreatefromjpeg($resized_filename); imagewebp($imagetoconvert, $webp_filename, 80); imagedestroy($resized_filename); } elseif ($info['mime'] == 'image/png') { $imagetoconvert = imagecreatefrompng($resized_filename); imagewebp($imagetoconvert, $webp_filename, 80); imagedestroy($resized_filename); } } Edited April 29, 2021 by get31 Quote Link to post Share on other sites
get31 Posted April 29, 2021 Report Share Posted April 29, 2021 Разобрался в чем была проблема use_imagick = false; Подскажите, а так и должно быть? Если фото не обработалось до webp, но в урле меняем формат на webp, отображается ошибка: Fatal error: Uncaught exception 'ImagickException' with message 'unable to open image `/home/virtwww/site/http/files/originals/2_16.webp': No such file or directory @ error/blob.c/OpenBlob/2874' in /home/virtwww/site/http/api/Image.php:366 Stack trace: #0 /home/virtwww/site/http/api/Image.php(366): Imagick->readimage('/home/virtwww/w...') #1 /home/virtwww/site/http/api/Image.php(78): Image->image_constrain_imagick('/home/virtwww/w...', '/home/virtwww/w...', '527', '800', NULL, '50', '50', 0.8, 0.2) #2 /home/virtwww/site/http/resize/resize.php(24): Image->resize('2_16.527x800.we...') #3 {main} thrown in /home/virtwww/site/http/api/Image.php on line 366 Quote Link to post Share on other sites
get31 Posted May 5, 2021 Report Share Posted May 5, 2021 Друзья, подскажите пожалуйста. Работает, но после удаления файлов из папки products на некоторые товары ошибка Warning: getimagesize(Z:\home\localhost\www\site/files/products/591970VCQR1-3458.450x600.webp) [function.getimagesize]: failed to open stream: No such file or directory in Z:\home\localhost\www\justbutik\resize\resize.php on line 85 почему ругается на $info = getimagesize($resized_filename); ? Quote Link to post Share on other sites
Noxter Posted May 6, 2021 Report Share Posted May 6, 2021 20 часов назад, get31 сказал: Друзья, подскажите пожалуйста. Работает, но после удаления файлов из папки products на некоторые товары ошибка Warning: getimagesize(Z:\home\localhost\www\site/files/products/591970VCQR1-3458.450x600.webp) [function.getimagesize]: failed to open stream: No such file or directory in Z:\home\localhost\www\justbutik\resize\resize.php on line 85 почему ругается на $info = getimagesize($resized_filename); ? Потому что файла не существует. Я бы добавил дополнительную проверку на существование файла. Quote Link to post Share on other sites
get31 Posted May 7, 2021 Report Share Posted May 7, 2021 22 часа назад, Noxter сказал: Потому что файла не существует. Я бы добавил дополнительную проверку на существование файла. так выводить проверку?? {if $product->image->filename|resize:450:600|replace:'.jpg':'.webp'|replace:'.png':'.webp'} <img src="{$product->image->filename|resize:450:600|replace:'.jpg':'.webp'|replace:'.png':'.webp'}" type="image/webp" /> {else} <img src="{$product->image->filename|resize:450:600}" /> {/if} Quote Link to post Share on other sites
Noxter Posted May 8, 2021 Report Share Posted May 8, 2021 В PHP! Quote Link to post Share on other sites
arhean Posted June 10, 2021 Report Share Posted June 10, 2021 (edited) Почему не генерируются файлы с расширением .webp при таком коде? Если я вставлю просто картинку в стандартном формате, то генерируется картинка в формате .jpg и в .webp, а если вставляю этот код, то генерация не происходит. Как инициализировать генерацию картинок при запросе к картинке в формате .webp? <picture> <source srcset="{$product->image->filename|resize:500:500|replace:'.jpg':'.webp'|replace:'.png':'.webp'}" type="image/webp" > <source srcset="{$product->image->filename|resize:500:500}" type="image/jpeg" > <img src="{$product->image->filename|resize:500:500}" alt="{$product->name|escape}" > </picture> Edited June 10, 2021 by arhean Quote Link to post Share on other sites
phukortsin Posted June 10, 2021 Report Share Posted June 10, 2021 Не генерируются, скорее всего, потому, что в функции resize такого не предусмотрено... Чтобы обрабатывались исходные картинки в формате .webp, надо программировать все нужное. Двумя строками вряд ли обойдетесь... Quote Link to post Share on other sites
arhean Posted June 11, 2021 Report Share Posted June 11, 2021 В 06.05.2021 в 14:02, Noxter сказал: Потому что файла не существует. Я бы добавил дополнительную проверку на существование файла. Не подскажите как сделать дополнительную проверку на наличие файла или сделать так, что бы файл создавался сам при инициализации изображения в формате webp? Quote Link to post Share on other sites
arhean Posted June 15, 2021 Report Share Posted June 15, 2021 (edited) Пока что нашел временное тупое решение -> в вашем шаблоне -> product.tpl вставить вместо изображения {if $smarty.session.admin == 'admin'} <div style="display:none;"> <img src="{$product->image->filename|resize:500:500}"> {*указать картинки со всеми размерами, которые генерируются на сайте*} </div> {/if} <picture> <source srcset="{$product->image->filename|resize:500:500|replace:'.jpg':'.webp'|replace:'.png':'.webp'}" type="image/webp"> <img src="{$product->image->filename|resize:500:500}" alt="{$product->name|escape}"> </picture> Соответственно после создания товара переходим на его страницу и изображения генерируются. Так как я всегда смотрю на карточку товара после создания, то данное решение не обременяет меня лишним нажатием на кнопку. Edited June 15, 2021 by arhean Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.