Jump to content

Recommended Posts

2 минуты назад, get31 сказал:

в линии 38 у меня как раз:



$info = getimagesize($resized_filename);

но папка точно есть, т.к без добавления webp все работает

Дальше смотрим в api/Design.php, api/Image.php и в .htaccess, где конфликт resized_filename

Edited by alexivchenko
Link to post
Share on other sites
  • Replies 60
  • Created
  • Last Reply

Top Posters In This Topic

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 by get31
Link to post
Share on other sites

Разобрался в чем была проблема

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

 

Link to post
Share on other sites

Друзья, подскажите пожалуйста.

Работает, но после удаления файлов из папки 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); ?

Link to post
Share on other sites
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); ?

Потому что файла не существует.

Я бы добавил дополнительную проверку на существование файла.

Link to post
Share on other sites
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}

 

Link to post
Share on other sites
  • 1 month later...

Почему не генерируются файлы с расширением .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 by arhean
Link to post
Share on other sites

Не генерируются, скорее всего, потому, что в функции resize такого не предусмотрено...

Чтобы обрабатывались исходные картинки в формате .webp, надо программировать все нужное.

Двумя строками вряд ли обойдетесь... 

Link to post
Share on other sites
В 06.05.2021 в 14:02, Noxter сказал:

Потому что файла не существует.

Я бы добавил дополнительную проверку на существование файла.

Не подскажите как сделать дополнительную проверку на наличие файла или сделать так, что бы файл создавался сам при инициализации изображения в формате webp?

Link to post
Share on other sites

Пока что нашел временное тупое решение -> в вашем шаблоне -> 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 by arhean
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...