Jump to content

Recommended Posts

Попытка не пытка!

 

Поставщики дают фото, которые чаще всего имеют разрешение 2000 + пх. Весят такие фото по 500 кб. и больше. На сайте используется максимальное разрешение 800х800 и весит такая картинка после ресайза примерно 100 кб. Само собой 10 гб. хостинга уходит как не бывало, за счет originals. Подскажите, как подружить $this->download_image с $this->add_resize_params, дабы заливать в originals уже урезанные фото, скажем до 1000x1000!?

Link to post
Share on other sites

Запрограммировать все нужное.

В принципе несложно.

Например, в конце download_image добавить:

1. Создание урезанного 1000х1000 в products.

2. Скопировать его в оriginals вместо исходного.

3. Удалить 1000х1000 из products.

Link to post
Share on other sites

Запрограммировать все нужное.

В принципе несложно.

Например, в конце download_image добавить:

1. Создание урезанного 1000х1000 в products.

2. Скопировать его в оriginals вместо исходного.

3. Удалить 1000х1000 из products.

 

Как вариант можно! А если пропускать через gd перед copy($filename, $this->config->root_dir.$this->config->original_images_dir.$new_name), или попробовать imagecopyresized?

Link to post
Share on other sites

Если изображений много приходит от поставщиков, то проще по крону, допустим раз в сутки обходить папку originals, и ресайзить изображения до нужного размера. 

Это решение так-же не будет влиять на скорость обработки прайса, ведь если ресайзить прямо во время загрузки прайса, будут тратиться ресурсы сервера на ресайз.

Link to post
Share on other sites

В общем мое решение следующее!

 

В таблицу s_images добавляем столбец под названием "resize" а в нем по дефолту = 0. В function resize($filename) перед return $preview_dir.$resized_file; добавляем следующий код:

 

        $this->db->query('SELECT filename, resize FROM __images WHERE filename=? AND resize = 0', $original_file); if($this->db->result()) {
        $resized_orig = $this->add_resize_params($original_file, $width=850, $height=850, $set_watermark=false);
        if(class_exists('Imagick') && $this->config->use_imagick)
            $this->image_constrain_imagick($originals_dir.$original_file, $preview_dir.$resized_orig, $width, $height, $watermark, $watermark_offet_x, $watermark_offet_y, $watermark_transparency, $sharpen);
        else
            $this->image_constrain_gd($originals_dir.$original_file, $preview_dir.$resized_orig, $width, $height, $watermark, $watermark_offet_x, $watermark_offet_y, $watermark_transparency);
        if(rename($preview_dir.$resized_orig, $originals_dir.$original_file))
            $this->db->query("UPDATE __images SET resize = 1 WHERE filename=?", $original_file); }
        return $preview_dir.$resized_orig;
 
Работает следующим образом, когда будет очередной запрос какого-либо ресайза, мы проверим значение resize для оригинала в бд, если в нем 0, значит ресайзим оригинал до нужного размера (в моем случае 850х850), и заменяем этим ресайзом оригинальный файл, + делаем пометку в базе что файл уже оптимизирован. Все! Ничего скачивать, оптимизировать и перезаливать не нужно, сторонние сервисы тоже ненужны. Фото сами себя оптимизируют. В GD ставим качество 95, конечные ресайзы будут 90, визуально разницы никакой, pagespeed выдает 92 балла.
Edited by kozhushko8
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...