Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

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

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



$info = getimagesize($resized_filename);

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

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

Изменено пользователем alexivchenko
Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 60
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

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);
  }
}

 

 

Изменено пользователем get31
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты
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); ?

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

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

Ссылка на сообщение
Поделиться на другие сайты
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}

 

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Почему не генерируются файлы с расширением .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>

 

Изменено пользователем arhean
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
В 06.05.2021 в 14:02, Noxter сказал:

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

Пока что нашел временное тупое решение -> в вашем шаблоне -> 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>

Соответственно после создания товара переходим на его страницу и изображения генерируются. Так как я всегда смотрю на карточку товара после создания, то данное решение не обременяет меня лишним нажатием на кнопку.

Изменено пользователем arhean
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...