0 Пользователей и 1 Гость просматривают эту тему.
  • 17 Ответов
  • 4598 Просмотров
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Кто подскажет,где править код,для того чтобы превью-фото объявлений получались строго квадратными,а не прямоугольными как в стандартной версии? а то все фото идут разными размерами :D
*

eX

  • Захожу иногда
  • 256
  • 72 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #1 : 15.09.2009, 09:12:26 »
Как сделать их строго квадратными не подскажу.
Вот код куда надо копать:

adsmanager.php
1. Вызывается аплоад и препарирование имиджев в функции save_ad
смотрим ниже:
Код
		// image1 upload
if (isset( $_FILES["ad_picture$i"]) and !$_FILES["ad_picture$i"]['error'] ) {
createImageAndThumb($_FILES["ad_picture$i"]['tmp_name'],$row->id.$ext_name.".jpg",$row->id.$ext_name."_t.jpg",

Соот-но нам нужна функция createImageAndThumb того же файла.
Исходя из кода нужно причесать код данной функции
Код
	// height/width
$imginfo = getimagesize($src_file);
$src_w = $imginfo[0];
$src_h = $imginfo[1];

$zoom_h = $max_h / $src_h;
    $zoom_w = $max_w / $src_w;
    $zoom   = min($zoom_h, $zoom_w);
    $dst_h  = $zoom<1 ? round($src_h*$zoom) : $src_h;
    $dst_w  = $zoom<1 ? round($src_w*$zoom) : $src_w;

$zoom_h = $max_thumb_h / $src_h;
    $zoom_w = $max_thumb_w / $src_w;
    $zoom   = min($zoom_h, $zoom_w);
    $dst_thumb_h  = $zoom<1 ? round($src_h*$zoom) : $src_h;
    $dst_thumb_w  = $zoom<1 ? round($src_w*$zoom) : $src_w;

$dst_img = imagecreatetruecolor($dst_w,$dst_h);

$white = imagecolorallocate($dst_img,255,255,255);
imagefill($dst_img,0,0,$white);
imagecopyresampled($dst_img,$src_img, 0,0,0,0, $dst_w,$dst_h,$src_w,$src_h);

Пример генерации можно найти сгуглив php resize thumb

*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #2 : 15.09.2009, 09:44:34 »
я советую пойти немножко дальше!
править функцию createImageAndThumb в файле adsmanager.php, используя сложное масштабирование в PHP http://www.codenet.ru/webmast/php/Image-Resize-GD/

Алгоритм работы изменённой функции createImageAndThumb описывать не буду, кто захочет сам разберется!
Привожу её код целиком:
Код
function createImageAndThumb($src_file,$image_name,$thumb_name,
$max_width,
    $max_height,
$max_width_t,
$max_height_t,
$tag,
$path,
$orig_name)
{
global $mosConfig_absolute_path;

$types = array(
        IMAGETYPE_JPEG => 'jpeg',
        IMAGETYPE_GIF => 'gif',
        IMAGETYPE_PNG => 'png'
    );

    ini_set('memory_limit', '32M');


$src_file = urldecode($src_file);
$orig_name = strtolower($orig_name);
$findme  = '.jpg';
$pos = strpos($orig_name, $findme);
if ($pos === false)
{
$findme  = '.jpeg';
$pos = strpos($orig_name, $findme);
if ($pos === false)
{
$findme  = '.gif';
$pos = strpos($orig_name, $findme);
if ($pos === false)
{
$findme  = '.png';
$pos = strpos($orig_name, $findme);
if ($pos === false)
{
return;
}
else
{
$type = "png";
}
}
else
{
$type = "gif";
}
}
else
{
$type = "jpeg";
}
}
else
{
$type = "jpeg";
}


$max_h = $max_height;
$max_w = $max_width;
$max_thumb_h = $max_height_t;
$max_thumb_w = $max_width_t;

if ( file_exists( "$path/$image_name")) {
unlink( "$path/$image_name");
}

if ( file_exists( "$path/$thumb_name")) {
unlink( "$path/$thumb_name");
}

$read = 'imagecreatefrom' . $type;
$write = 'image' . $type;

$src_img = $read($src_file);

$imginfo = getimagesize($src_file);
$src_w = $imginfo[0];
$src_h = $imginfo[1];

$zoom_h = $max_h / $src_h;
    $zoom_w = $max_w / $src_w;
    $zoom   = min($zoom_h, $zoom_w);
    $dst_h  = $zoom<1 ? round($src_h*$zoom) : $src_h;
    $dst_w  = $zoom<1 ? round($src_w*$zoom) : $src_w;

$zoom_h = $max_thumb_h / $src_h;
    $zoom_w = $max_thumb_w / $src_w;
    $zoom   = min($zoom_h, $zoom_w);
    $dst_thumb_h  = $max_thumb_h;
    $dst_thumb_w  = $max_thumb_w;

$dst_img = imagecreatetruecolor($dst_w,$dst_h);

$white = imagecolorallocate($dst_img,255,255,255);
imagefill($dst_img,0,0,$white);
imagecopyresampled($dst_img,$src_img, 0,0,0,0, $dst_w,$dst_h,$src_w,$src_h);
$textcolor = imagecolorallocate($dst_img, 255, 255, 255);
if (isset($tag))
imagestring($dst_img, 5, 5, 5, "$tag", $textcolor); 
if($type == 'jpeg'){
        $desc_img = $write($dst_img,"$path/$image_name", 75);
}else{
        $desc_img = $write($dst_img,"$path/$image_name", 2);
}

$dst_t_img = imagecreatetruecolor($dst_thumb_w,$dst_thumb_h);
$white = imagecolorallocate($dst_img,255,255,255);
imagefill($dst_t_img,0,0,$white);

$k_img = round($src_w/$dst_thumb_w);
if (($k_img*$dst_thumb_h) == $src_h) {
imagecopyresampled($dst_t_img, $src_img,
 0, 0,
 0, 0,
 $dst_thumb_w, $dst_thumb_h,
 $src_w, $src_h);
}
if (($k_img*$dst_thumb_h) < $src_h) {
imagecopyresampled($dst_t_img, $src_img,
0, 0,
0, round($src_h/2-($k_img*$dst_thumb_h)/2),
$dst_thumb_w, $dst_thumb_h,
$src_w,  ($k_img*$dst_thumb_h));}

if (($k_img*$dst_thumb_h) > $src_h) {imagecopyresampled($dst_t_img, $src_img,
0, 0,
round($src_w/2-($k_img*$dst_thumb_w)/2), 0,
$dst_thumb_w, $dst_thumb_h,
($k_img*$dst_thumb_w),$src_h ); }

$textcolor = imagecolorallocate($dst_t_img, 255, 255, 255);
if (isset($tag))
imagestring($dst_t_img, 2, 2, 2, "$tag", $textcolor);
if($type == 'jpeg'){
        $desc_img = $write($dst_t_img,"$path/$thumb_name", 75);
}else{
        $desc_img = $write($dst_t_img,"$path/$thumb_name", 2);
}


}

Выставляйте в настройках компонента желаемый размер привью изображения и наслождайтесь:)
« Последнее редактирование: 19.01.2010, 01:24:31 от Kikasso »
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #3 : 15.09.2009, 09:52:52 »
спасибо за отклики!в том то и проблема что в алгоритме я мало чего понимаю ^-^
Kikasso код надо заменить на ваш? или вы просто показали строки где надо править?
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #4 : 15.09.2009, 10:02:39 »
надо заменить код функции createImageAndThumb, на тот - что я привел выше, тогда к превью изображениям будет применено сложное масштабирование, а их размеры будут одинаковы!
« Последнее редактирование: 15.09.2009, 10:05:51 от Kikasso »
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #5 : 15.09.2009, 10:11:17 »
масштабирование произошло,но только с подгонкой т.е превью теперь вытянутые :(
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #6 : 15.09.2009, 18:02:08 »
Странно, у меня всё работает! Разбирайся, что у тебя не так!

Для информации ниже привожу код непосредственно отвечающий за масштабирование.

Код
$k_img = round($src_w/$dst_thumb_w);
if (($k_img*$dst_thumb_h) == $src_h) {
imagecopyresampled($dst_t_img, $src_img,
 0, 0,
 0, 0,
 $dst_thumb_w, $dst_thumb_h,
 $src_w, $src_h);
}
if (($k_img*$dst_thumb_h) < $src_h) {
imagecopyresampled($dst_t_img, $src_img,
0, 0,
0, round($src_h/2-($k_img*$dst_thumb_h)/2),
$dst_thumb_w, $dst_thumb_h,
$src_w,  ($k_img*$dst_thumb_h));}

if (($k_img*$dst_thumb_h) > $src_h) {imagecopyresampled($dst_t_img, $src_img,
0, 0,
round($src_w/2-($k_img*$dst_thumb_w)/2), 0,
$dst_thumb_w, $dst_thumb_h,
($k_img*$dst_thumb_w),$src_h ); }
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #7 : 15.09.2009, 18:09:16 »
получается с некоторыми картинками,а некоторые все равно растянуты или сплющеные получаются
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #8 : 15.09.2009, 18:13:58 »
какие размеры эскиза ты выставляешь?? Попробуй обновить страницу несколько раз - растянутые картинки видимо из кэша браузера, сделанные старой функцией createImageAndThumb или используй только новые (которые ещё не загружал) картинки, должно быть всё ОК :laugh:
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #9 : 15.09.2009, 18:31:09 »
кэш не помогает,размеры задаю 90*90, все-равно тоже самое
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #10 : 15.09.2009, 18:32:20 »
кэш не помогает,размеры задаю 90*90, все-равно тоже самое
превьюшки стали квадратными,но некоторые подгоняютс некоректно
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #11 : 15.09.2009, 18:41:43 »
ты был прав,загрузил новые фотки вроде все пошло как надо yes!
пилюс тебе ;D
*

Ротор

  • Захожу иногда
  • 97
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #12 : 06.10.2009, 10:53:25 »
все равно фотки снятые в ширину получаются приплюснутые,а фотки снятые в высоту нормальные,
может как-нибудь обрезку сделать? вопрос как ::)
*

freik

  • Осваиваюсь на форуме
  • 35
  • 2 / 2
« Последнее редактирование: 10.10.2009, 00:49:31 от freik »
*

Sakhalin

  • Захожу иногда
  • 162
  • 6 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #14 : 06.03.2010, 19:20:43 »
Типа такого! )
*

Night

  • Осваиваюсь на форуме
  • 39
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #15 : 06.05.2010, 18:22:10 »
надо заменить код функции createImageAndThumb, на тот - что я привел выше, тогда к превью изображениям будет применено сложное масштабирование, а их размеры будут одинаковы!

А как заставить ADSку сохранять превьюшки в другую папку? Я хочу с помощью YooGallery выводить товары на главную, но в папке с полными картинками лежат и превью. Не оч красиво получается.
*

cauua

  • Новичок
  • 3
  • 0 / 0
  • Жизнь европейских тятров
Re: строго квадратные превью-фото в ADS
« Ответ #16 : 13.09.2010, 14:05:10 »
А вот я тоже хочу написать!

Ситуация такая. Код функции я вставил! Все нормально работает. Превьюшки квадратные.
НО один момент!

если оригинал картинки например в высоту - 500, а в ширину 100

то превюьшка получается квадратной но симетрия нарушается! он по ширине обрубает и пинцет полный.

а вот если ему скормить 500 на 500 то превьюха зачетная...

и как сделать так чтобы ему скармливать любую а он уже по меньшей стороне добавлял уши сам!


подскажите пожалуйсто!

оченя хочетсо решить данный вопрос!

Спасибо!
*

bolivak

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Re: строго квадратные превью-фото в ADS
« Ответ #17 : 25.03.2011, 16:52:40 »
Изображения небольшого веса, даже при достаточных размерах (3264х2448) получаются обрезанными идеально, но вот при увеличении веса симметрия нарушается и они растягиваются очень некрасиво! Говорить пользователям, чтобы они уменьшали размер своих фото, как то не очень, имхо, просто отпугнет их. 

Может подскажите, что-то, что будет при загрузке изображений уменьшать их вес?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Автоматическое удаление фото объявления после истечения

Автор jimka

Ответов: 3
Просмотров: 728
Последний ответ 11.11.2016, 17:32:53
от Beer
Некорректное отображение фото в AdsManager в подробном режиме

Автор mikhail+

Ответов: 0
Просмотров: 613
Последний ответ 27.05.2016, 13:40:19
от mikhail+
Размер загружаемых фото

Автор voras

Ответов: 19
Просмотров: 800
Последний ответ 09.02.2016, 17:10:14
от voras
AdsManager вертикальные фото загружает горизонтально

Автор tidra21

Ответов: 2
Просмотров: 896
Последний ответ 11.02.2015, 12:27:23
от tidra21
Не загружаются фото при добавлении объявления

Автор kluchnikov85

Ответов: 2
Просмотров: 960
Последний ответ 17.12.2014, 22:58:00
от kluchnikov85