Корректное уменьшение изображений до нужных размеров, без квадрат'тирования

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

Изучил: пост о Работе с изображениями где показан основной функционал.

Задача: нужно сделать так что бы заливаемое изображение было корректно уменьшено среди 2 величин, то есть если я ставлю значения 64x64 то изображение если у него разрешение 400x600 то оно бы стало 62x64 а сейчас при использовании кода
$this->Image_Resize($sFileTmp,$sUploadPath,"logo_type_{$oCompany->getUrl()}_64x64",3000,3000,64,null,true,$aParams)) {
оно становится 64x96 а если меняешь переменные 64,null на null,64 то выдаёт ошибку при загрузке.
Так же выдаёт ошибку если меняешь 3000,3000 на 64,64 я так понимаю, эти 2 переменные отвечают за максимальное разрешение изображения.
Пробовал сделать и так 64,64,null,null и снова выдаёт ошибка, а если делаешь 3000,3000,64,64 то из изображения получается квадратная аватарка с растягиванием..:(

8 комментариев

avatar
Что за умный такой нашелся, что только и может что минусовать посты..?
Объяснил бы лучше в чём может быть проблема.

А самое главное зашкерился и даже нечего не написал…
avatar
отлично работает кусок, из базового функционала загрузки, фото к профилю, попробуйте на его основе поковырять
avatar
да нифига оно не отлично, ресайзит только до определенной ширины… модуль лайвимидж кривой шо капец! или просто недописан
avatar
довольно странный Ваш коментарий (хотя не исключу что просто ручки неправильные)…
итак по сути вопроса берем на примере загрузки фото к профилю, открываем файл \classes\modules\user\User.class.php, находим функцию UploadFoto в ней кусок кода
if ($sFileFoto=$this->Image_Resize($sFileTmp,$sDirUpload,func_generator(6),Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),250,null,true,$aParams)) {
начинаем менять 6 параметр (значение 250) и смотреть что имеем на выходе:
250 -> 64
фото 400х400 -> выхлоп 64x64
фото 1366х768 -> выхлоп 64x36
фото 400х600 -> выхлоп 64x96

дальше открываем фотошоп создаем новые листы с размерами 400х400, 1366х768, 400х600 и уменьшаем поочередно к ширине 64 — выхлопы у каждого становятся 64x64, 64x36, 64x96. тоже самое с уменьшением к 48, 24, 12
Внимание вопрос! — в каком месте криво ресайзит? или может всеже Вам стоит посмотреть на руки?
avatar
вот, вы сами почти ответили на свой вопрос — 400х400 -> выхлоп 64x64 1366х768 -> выхлоп 64x36. А тепер пробуем вписать любую картинку в рамки 250х200 например… Ставим параметр выстоу 200 и получаем 250х200!!! Капитан? НО! масштабирования не происходит… Картинка растянута.
В чем дело? Лезем в код \engine\modules\image\Image.class.php и наблюдаем код, которий чуть больше чем абсолютно не ровно дышит к высоте и ширине… Например параметр iWidthDest задать null а iHeighthDest не null (дык сразу надо было так делать), то картинка вообше не изменит размер свой! Хотя должна изменить высоту и подогнать ширинцу по логике, как с шыриной.
На мой взгяд код должен быть симетричним к обоим параметрам, над чем собсно и колдую сейчас.
avatar
Если добьётесь результата, подскажите как это реализовать.
avatar
Добавил function по более гибкому обработчику изображений livestreet.ru/blog/7048.html посмотри, возможно с ним у тебя получится, и может быть подскажешь как увеличить качество изображения в нём..?
avatar
По аналогии с фото к профилю делал.
Фото к профилю добавляется на основании элемента width 250 а height null автоматически пропорционально уменьшается, но если поменять значения на width null а height 250 то начинает выдоваться ошибка…
А с Config::Get('view.img_max_width'),Config::Get('view.img_max_height') происходит ещё интереснее, если их делаешь меньше размера загружаемого изображения то тоже выдаётся ошибка, возможно это только у меня так, и даже не знаю с чем это может быть связано..:(
Это я пытаюсь сделать к фотографии плагина «Компании».
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.