partizzzzzan Опубликовано 27 августа, 2013 Жалоба Поделиться Опубликовано 27 августа, 2013 (изменено) На форуме поднимали вопрос на счет ресайза изображений Я изменил функцию ресайза изображений для библиотеки gd ресайз делается точно соответсвуя размерам, например, если указано resize:200:200 превью получиться 200 на 200, даже если исходник не пропорционален этим размерам. Превью создается по большей из сторон,пустоты заливаются либо прозрачным цветом, либо белым. в прикрепленных файлах исходное изображение и после ресайза. заполняемыйцвет специально изменен с белого, чтобы показатькак работает функция. Функция сделана пока что только для gd библиотеки, для imagick сделаю позже. в файле изменения помечены //edit1, //edit2 и т.д. Для того чтобы функция работала заменить файл api/image.phpP.S. ВНИМАНИЕ!!! Второй файл Image.php для версии 2.3.x т.к. обнаружил небольшие изменения в данном файле в версии 2.3.xImage.phpImage.php Изменено 16 августа, 2014 пользователем partizzzzzan Цитата Ссылка на сообщение Поделиться на другие сайты
AnyKey Опубликовано 27 августа, 2013 Жалоба Поделиться Опубликовано 27 августа, 2013 Ай молодец! Цитата Ссылка на сообщение Поделиться на другие сайты
partizzzzzan Опубликовано 27 августа, 2013 Автор Жалоба Поделиться Опубликовано 27 августа, 2013 Сам не нарадуюсь)))) В php особо не силен, взял за основу подобную функцию в opencart, почитал документацию по gd и вот получилось!!!!! Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 28 августа, 2013 Жалоба Поделиться Опубликовано 28 августа, 2013 partizzzzzan На странице товара получается сильно большой отступ: http://simplacms.16mb.com/products/fotoapparat_canon_powershot_a3200_is Цитата Ссылка на сообщение Поделиться на другие сайты
Kpoxa Опубликовано 28 августа, 2013 Жалоба Поделиться Опубликовано 28 августа, 2013 partizzzzzan На странице товара получается сильно большой отступ: http://simplacms.16mb.com/products/fotoapparat_canon_powershot_a3200_isУ Вас размеры картинки 200х300 почему-то Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 28 августа, 2013 Жалоба Поделиться Опубликовано 28 августа, 2013 исправил, спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
Kpoxa Опубликовано 28 августа, 2013 Жалоба Поделиться Опубликовано 28 августа, 2013 Да не за что, и верните изменения в css, .product .image{ width:200px; .... } будет по красивее. Цитата Ссылка на сообщение Поделиться на другие сайты
ps-simpla Опубликовано 29 августа, 2013 Жалоба Поделиться Опубликовано 29 августа, 2013 Да не за что, и верните изменения в css, .product .image{ width:200px; .... } будет по красивее. согласен, всегда пользуюсь этим методом Цитата Ссылка на сообщение Поделиться на другие сайты
luxury Опубликовано 13 января, 2014 Жалоба Поделиться Опубликовано 13 января, 2014 Для imagick не делали ещё? Цитата Ссылка на сообщение Поделиться на другие сайты
chubr Опубликовано 13 марта, 2014 Жалоба Поделиться Опубликовано 13 марта, 2014 подскажите, как можно добиться увеличение изображения? и хочется чтобы gif анимация сохранялась не только на большом изображении, но и на уменьшиных, это возможно? Цитата Ссылка на сообщение Поделиться на другие сайты
partizzzzzan Опубликовано 16 августа, 2014 Автор Жалоба Поделиться Опубликовано 16 августа, 2014 Для imagick не делали ещё? Да как-то руки не дошли, но думаю займусь этим в ближайшее время Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 30 ноября, 2014 Жалоба Поделиться Опубликовано 30 ноября, 2014 Вот вроде накидал для imagick, пробуйте private function image_constrain_imagick($src_file, $dst_file, $max_w, $max_h, $watermark=null, $watermark_offet_x=0, $watermark_offet_y=0, $watermark_opacity=1, $sharpen=0.2) { $thumb = new Imagick(); // Читаем изображение if(!$thumb->readImage($src_file)) return false; // Размеры исходного изображения $src_w = $thumb->getImageWidth(); $src_h = $thumb->getImageHeight(); // Нужно ли обрезать? if (!$watermark && ($src_w <= $max_w) && ($src_h <= $max_h)) { // Нет - просто скопируем файл if (!copy($src_file, $dst_file)) return false; return true; } // Размеры превью при пропорциональном уменьшении list($dst_w, $dst_h) = $this->calc_contrain_size($src_w, $src_h, $max_w, $max_h); // Уменьшаем $thumb->thumbnailImage($dst_w, $dst_h); $canvas = new Imagick(); $canvas->newImage($max_w, $max_h, new ImagickPixel("white")); // Устанавливаем водяной знак if($watermark && is_readable($watermark)) { $overlay = new Imagick($watermark); //$overlay->setImageOpacity($watermark_opacity); //$overlay_compose = $overlay->getImageCompose(); $overlay->evaluateImage(Imagick::EVALUATE_MULTIPLY, $watermark_opacity, Imagick::CHANNEL_ALPHA); // Get the size of overlay $owidth = $overlay->getImageWidth(); $oheight = $overlay->getImageHeight(); $watermark_x = min(($max_w-$owidth)*$watermark_offet_x/100, $max_w); $watermark_y = min(($max_h-$oheight)*$watermark_offet_y/100, $max_h); } // Анимированные gif требуют прохода по фреймам foreach($thumb as $frame) { // Уменьшаем $frame->thumbnailImage($dst_w, $dst_h); /* Set the virtual canvas to correct size */ $frame->setImagePage($dst_w, $dst_h, 0, 0); // Наводим резкость if($sharpen > 0) $thumb->adaptiveSharpenImage($sharpen, $sharpen); $canvas->compositeImage($frame, $frame->getImageCompose(), ($max_w-$dst_w)/2, ($max_h-$dst_h)/2); if(isset($overlay) && is_object($overlay)) { // $frame->compositeImage($overlay, $overlay_compose, $watermark_x, $watermark_y, imagick::COLOR_ALPHA); $canvas->compositeImage($overlay, imagick::COMPOSITE_OVER, $watermark_x, $watermark_y, imagick::COLOR_ALPHA); } } // Убираем комменты и т.п. из картинки $canvas->stripImage(); // $thumb->setImageCompressionQuality(100); // Записываем картинку if(!$canvas->writeImages($dst_file, true)) return false; // Уборка $thumb->destroy(); if(isset($overlay) && is_object($overlay)) $overlay->destroy(); $canvas->destroy(); return true; } Цитата Ссылка на сообщение Поделиться на другие сайты
partizzzzzan Опубликовано 30 ноября, 2014 Автор Жалоба Поделиться Опубликовано 30 ноября, 2014 Красавчик, молодец! Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 30 ноября, 2014 Жалоба Поделиться Опубликовано 30 ноября, 2014 Думаю, стоит еще убрать проверку на обрезание, это очень хорошо будет для адаптивных шаблонов. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 30 ноября, 2014 Жалоба Поделиться Опубликовано 30 ноября, 2014 Точнее, не убрать, а накладывать на подложку исходное изображение. Цитата Ссылка на сообщение Поделиться на другие сайты
SmartyDev Опубликовано 17 декабря, 2014 Жалоба Поделиться Опубликовано 17 декабря, 2014 А смысл от этой доработки, зачем так заморачиваться когда в CSS можно всё сделать, прописав родителю "display: table-cell, vertical-align: middle и т.д." Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 17 декабря, 2014 Жалоба Поделиться Опубликовано 17 декабря, 2014 А в чем тут трудности - пару файлов скопировать? Прописывать родителю "display: table-cell, vertical-align: middle и т.д." придется в шаблоне в НЕСКОЛЬКИХ местах, и не под копирку, а в каждом индивидуально в стилях размеры устанавливать. А еще может быть, что родитель у элемента содержит еще какие-то элементы, тогда что-то в верстке менять надо. А уж если шаблон меняется хотя бы время от времени, то по Вашему предложению хлопот точно будет больше... А если сайтов несколько и шаблонов несколько? Предлагаемый метод работает сразу ВО ВСЕХ ШАБЛОНАХ, в Вы зовете с каждым шаблоном возиться отдельно... Цитата Ссылка на сообщение Поделиться на другие сайты
kislotnik Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 на 2.3.6 раюотает? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 на 2.3.6 раюотает?Вам ничего не мешает проверить это самостоятельно, это будет быстрее чем тупо ждать ответа. Цитата Ссылка на сообщение Поделиться на другие сайты
kislotnik Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 Уже проверил.не работает. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 Папку products очищали? Цитата Ссылка на сообщение Поделиться на другие сайты
kislotnik Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 Папку products очищали? В смысле? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 В том смысле, что если в папке файлс/продуктс уже есть готовые старые файлы ресайза, то при замене функции ничего не поменяется, а разница будет заметна только на новых картинках и новых товарах Цитата Ссылка на сообщение Поделиться на другие сайты
kislotnik Опубликовано 1 июня, 2015 Жалоба Поделиться Опубликовано 1 июня, 2015 вот для 2.3.6 100% работает. у себя проверял.Image.php Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 1 июня, 2015 Жалоба Поделиться Опубликовано 1 июня, 2015 вот для 2.3.6 100% работает. у себя проверял.В чем различие вашего файла и файла ТС? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.