kozhushko8 Опубликовано 10 августа, 2020 Жалоба Поделиться Опубликовано 10 августа, 2020 Попытка не пытка! Поставщики дают фото, которые чаще всего имеют разрешение 2000 + пх. Весят такие фото по 500 кб. и больше. На сайте используется максимальное разрешение 800х800 и весит такая картинка после ресайза примерно 100 кб. Само собой 10 гб. хостинга уходит как не бывало, за счет originals. Подскажите, как подружить $this->download_image с $this->add_resize_params, дабы заливать в originals уже урезанные фото, скажем до 1000x1000!? Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 10 августа, 2020 Жалоба Поделиться Опубликовано 10 августа, 2020 Запрограммировать все нужное.В принципе несложно.Например, в конце download_image добавить:1. Создание урезанного 1000х1000 в products.2. Скопировать его в оriginals вместо исходного.3. Удалить 1000х1000 из products. Цитата Ссылка на сообщение Поделиться на другие сайты
kozhushko8 Опубликовано 10 августа, 2020 Автор Жалоба Поделиться Опубликовано 10 августа, 2020 Запрограммировать все нужное.В принципе несложно.Например, в конце 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? Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 10 августа, 2020 Жалоба Поделиться Опубликовано 10 августа, 2020 Пропускайте...Или пробуйте... Цитата Ссылка на сообщение Поделиться на другие сайты
ABSORBER Опубликовано 12 августа, 2020 Жалоба Поделиться Опубликовано 12 августа, 2020 Если изображений много приходит от поставщиков, то проще по крону, допустим раз в сутки обходить папку originals, и ресайзить изображения до нужного размера. Это решение так-же не будет влиять на скорость обработки прайса, ведь если ресайзить прямо во время загрузки прайса, будут тратиться ресурсы сервера на ресайз. Цитата Ссылка на сообщение Поделиться на другие сайты
kozhushko8 Опубликовано 12 августа, 2020 Автор Жалоба Поделиться Опубликовано 12 августа, 2020 (изменено) В общем мое решение следующее! В таблицу 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 балла. Изменено 12 августа, 2020 пользователем kozhushko8 Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.