При ресайзе изображений, если исходные пропорции не подходят, то на картинке создаются поля - черного цвета. Кто нибудь может знает где можно изменить этот цвет - например на белый?
Это известный баг, или "особенность" пхпшной функции resize. Мы как-то сражались на одном сайте, обгуглились, но по-моему так и не победили. Там надо в ядро интерпретатора на хостинге лезть, вроде
я этот вопрос для того и задал - что вручную несколько сотен картинок не хочется обрабатывать в редакторе.
Но в общем то мы вроде уже близко к решению этой проблемы - если все получится, выложу тут решение.
Заливка полей черным цветом - это не баг и не фича интерпретатора на хостинге, изменение цвета можно реализовать при помощи функции crop (файл includes/image.php), но "из коробки" она реализована весьма необычно.
Допустим, нужно обрезать картинку 120*200 до размера 150*150, расположив изображение по центру.
Очевидный подход: Создать новое изображение-приемник 150*150, и скопировать в него оригинальное изображение, сдвинув его относительно приемника на нужную величину. Для этого есть функция imagecopy ( приемник, источник, x приемника, y приемника, x источника, y источника, ширина источника, высота источника ) в нашем случае это будет: imagecopy ($out, $original, 15, -25, 0, 0, 120, 200);
Существующий подход: В функции crop (при заданных начальных условиях) будет сделан такой вызов: imageCopy($out, $original, 0, 0, -15, 25, 150, 150);
То есть, во-первых, ширина и высота источника задаются 150*150, а поскольку ширина исходной картинки в нашем примере 120, скопировать из оставшейся полоски в 30 пикселей ничего не удастся, и она окажется черной.
Во-вторых, никакого смещения относительно приемника нет - копирование всегда происходит в верхний левый угол 0, 0, а смещается сама область копирования в источнике, здесь - влево на 15 пикселей от нуля, где, опять же, изображение отсутствует. В итоге слева и справа получим черные полосы по 15 пикселей.
Желающим перейти от второго подхода к первому требуется:
1. Поменять местами уменьшаемое и вычитаемое при вычислении смещения:
Код
case 'bottom':
$y = $height - $info[1] - (int)$sy;
break;
case 'middle':
$y = ceil($height/2) - ceil($info[1]/2) + (int)$sy;
break;
case 'right':
$x = $width - $info[0] - (int)$sx;
break;
case 'center':
$x = ceil($width/2) - ceil($info[0]/2) + (int)$sx;
break;
Я уже предложил заливать по умолчанию белым.
На самом деле меня дезинформировал Garik, который в свое время занимался этим вопросом на одном проекте. А вот Марина говорит, что это не проблема и она всегда в ТП давала всем жаждущим инструкции, подобные Дмитриевым.
Два часа сегодня убил. Половина изображения белым заливалась, а вторая - чёрным. Спасибо, Dmitry (weissfl), работает! и чего я раньше не зашёл, хоккей бы посмотрел нормально
А кто-нибудь смотрел как обстоят дела в 6.0? Сегодня на 6.0.0.5 настроил в обработке изображений следующее:
1. Изменить пропорционально 150х150
2. Обрезать 150х150, от центра 0px, от центра 0px.
Должно вроде как получиться изображение вписанное в квадрат, а пустые поля (если изображение не квадратное) заполниться по краям цветом. НО получил то что в прикрепленном файле!
Решил воспользоваться схемой Dmitry (weissfl), НО не тут то было... там теперь всё по другому!
Кто-нибудь решил эту проблему с обрезкой? и как теперь изменить цвет заливки на белый?
Нет. Это у всех так.
Для решения нужно править класс режущий картинки.
Но копаться в нем явно некто не хочет. Да и из опыта понятно, что вы просто не верно настраиваете обезку картинок.
Правда... а как правильно тогда настраивать? Просто когда правил файл includes/image.php в 5-й версии по инструкции DMITRY (WEISSFL) то всё работало как надо с указанными мной настройками.
Тем более не пойму что я такого с настройках сделал (они указаны выше в посте моём)... что так обрезает с краев картинку и её сдвигает в сторону сильно (в том же посте во вложении видно)?
Разработчики писали что он ввели новый метод обрезки изображений. Возможно после перехода на 6.х у вас начались проблемы имено из-за нового метода.
Я делаю в несколько шагов. Сначала уменьшаю (кстати можно оставлять только одно значение, например ширину не вводя высоту, т.е. оставив поле пустым или просто прописав в поле значительно больший размер).
После чего уже обрезаю по высоте если мне необходимы картинки именно такого размера.
Я использовал слово метод в значении "способ", а не ООП, если вы хотите чтобы я говорил языком программистов я могу это делать, у меня достаточно квалификации, но вот не уверен что будут и понимать мои ответы простые пользователи. Зачем так не вежливо передергивать...
Раньше у вас вроде на этой странице все плагины и библиотеки были перечислены. Imagick или ImageMagick я там раньше видел, если мне память не изменяет.
Евгений, то что вы предлагаете (на скриншоте у вас) мне не подходит. Мне нужно, чтобы картинка по центру размещалась, а поля были одинаковыми по ширине или высоте с краев. Если я ставлю в обрезке ОТ ЦЕНТРА 0, то получаю то что на третьей картинке - а это вообще не правильный результат! Если ставлю обрезку СВЕРХУ 0 и СЛЕВА 0, как у вас на скриншоте, ТО работает правильно но не то что нужно мне (на второй картинке).
А то что нужно мне - это на первой картинке. Нашёл как это сделать! Не знаю насколько это правильно сделал, НО работает и меня устраивает.
Вот что сделал: в файле /includes/image.php закомментировал в функции function calcPosition строки
Нет, это не моя задумка... так по умолчанию... мне нужно чтобы были не черные, а белые поля. А как поменять заливку полей на белый я не нашел как в 6-ке сделать.
Мне нужно было просто чтобы картинки была полностью вписана в квадратную область, а поля белым залиты.
ТП отписалась что рашили проблему с обрезкой от центра и в след.обновлении будет исправлено.
Я разрабатывал самописный проект ля одного из заказчиков. Там я использовал готовый класс (можно тут почитать).
Там есть настройки фона изображения если его нужно принудительно увеличить. (демо тут)
Код
$foo->image_background_color = '#FF00FF';
Я не знаю что именно сейчас использует Диафан, но скорее всего что-то похожее и если так, то можно допилить модуль под изменение цвета фона, и боле корректной логики обрезки изображения. Потому что сейчас в этом модуле хромает именно логика.
В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке.