[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблеммы с обрезкой изображения.
grefon
Здравствуйте. Подскажите, пожалуйста, как решить такую задачу. Есть графический файл ($image). Нужно получить его уменьшенную обрезанную «копию» ($smallimage) с размером 100 на 80 пикселей. То есть, если файлик $image больше 100х80 px вызывается функция, которая его сначала пропорционально уменьшает, а потоп функция, которая обрезает ему лишние пиксили по краям.
У меня получился вот такой код:

PHP
$sizeqq getimagesize("../".$image); // узнаем размер сторон изображения
$widthqq $sizeqq[0];
$heightqq $sizeqq[1];

if (
$widthqq "100") { // задаем условие, если файлик по размерам меньше чем нам нужно ниче не делаем, если больше, начинаем уменьшение.
resizeimg($image$smallimage100800); // пропорционально уменьшаем файл

$smallitt "../".$smallimage// создаю переменную с путем к файлу

$image_p imagecreatetruecolor(10080);  // создаю пустышку
$imagetr imagecreatefromjpeg($smallitt);  // указываю от куда нужно брать интересующую меня часть изображения.
imagecopyresampled($image_p$imagetr000351008010080); // обрезаю лишнее

$smallimage imagejpeg($image_pnull100);  // теоритически создаю саму обалочку jpg и приравниваю ее к интересующему меня значению

} else { $smallimage $image; } // если исходный файл меньше чем указано выше - приравниваю превью к исходному файлу


Но в конечном итоге файл (превью) пропорционально масштабируется, а по краям не обрезается. И при выполнении скрипта на экран вылазит куча мусора – типа такого:

HTML
!Ф,ґЯ ш4џ ^hZ¦±¤шgVґ‡TЋуFІµј›R‚ТЫВл'…}ЛMшw ГбIј
вп XxЇ^ФЇеФј7eв «[yto ]и ®Ї©ЯЩiєbЛ?…mх{’љz=ХюҐzц‹wk іЛ¬+вя…ћ$рЖЁш“вN‰вK/‡ћ с¶“рю[ Х—ГЪЋ©{§jљ}еµ–ЈЦҐЄ}іЕъЧѓСфшьWe6Џбл[T—SФuџ ЯhB ы_Ж};БP|ZУ|[-Я‹¬&›Дъmо‡
›k іЄIЉ—?†u yпнвЌв‚ПAQ¬AЎ\Ь…Ћч GdBН± кw„pіUgU~о0ЅжфЦ7KЇWйҐПЎҐ†Tў§WЬ‹•јТКэvпs-бзГ/й7Ч Рфй|'mofnl–ыWЏQ№}6ЗL𦛬hЪ3кљeюeэ№*Яjп«AЄ\Z6Ў,aЇ дO�µї€ Ж»сCRрЗГя…ZѕЅаЯ Ke'Дo _Пs{zю Т
ќэ«г ltЭ&Э¬ґыїн ц)gы%ДїbїыEЅ№Љ/;чsа'мq©юХ_ ој!рЧЕ Ю рчЃ4 5я|aсv™k$Юрж� ‘•lеХl®-ЇЇlf°У<7<снСR•Imж\GхoД_„яІчмыс3Д> шївЯЊяµ®Џ Сt‰oвo xwАѕ ‡Гw^wц•‡ь=¦ь рџ‚|iЈ®™эЇpuФ>"k) цEЮУ0Љ qдбіz�zO Ќ|ТЅЅцЭ“еЅ•ЧW}ЦчоuUВ№KЩбS«Q[Э…ЇІ¶цZЫ^ќПжS@эўю1|RРlј рЛА
Oаџ _Ъx~ГVЦпфё„сxЄуS»ј‘-фHП…4}kмMэ�тI|РЕ4vСјіГоЯ±—ь [Zэ®hO | р§Љ4o ь4рЇГН_г Џ>5kpШй'_реЇ‰ґЖс,> `¶ ҐюџвэIь>-ґн НЦ›Ё‘wц%ієјчЇЪ бoБoЩ®яГoр®ЖЫГ? ѕ!ЙЄxлАV7 к~!—ГєЈЭлљ•‰ґ-CДVЦW і ыbЖТ;ґ¶
3Бs=ЕЌ§©юВ¬ .5]/Жі|:‹Д0jЪ•‰х{П xџЕік> рЦЎ ЭOm >
С“ZЧtл«џ кєfќo
¶t FКXх лэJЮОкб"3
,N Њ©†m^ґ_єЇe}УхУdэL#—Ж¬щ*®Z‹^Y-]№mЧЧ—Мь†э©їgџШуZс§Жx> ьaСј ў|=ш‰©hє
Џ …s'†tЇ Ќ'VєµµЅ№ѕHo¦MrоАї‡"Рµ \N4miЇ?іШйѓSшЕ_іП€фH Z®Ѕ§шЏмрјVW Э ЙRь[йw–


Подскажите, где ошибка?




Спустя 1 час, 55 минут, 40 секунд (11.05.2009 - 20:34) vasa_c написал(а):
Что есть функция resizeimg()?
Как вы выводите изображение?

Спустя 46 минут, 9 секунд (11.05.2009 - 21:20) Viking написал(а):
Цитата
$smallimage = imagejpeg($image_p, null, 100);  // теоритически создаю саму обалочку jpg и приравниваю ее к интересующему меня значению

imagejpeg выводит изображение в браузер и возвращает true или false, если соответствующий заголовок неотправлен, то и будет фигня вместо картинки выводиться, а $smallimage будет true
Цитата
imagecopyresampled($image_p, $imagetr, 0, 0, 0, 35, 100, 80, 100, 80); // обрезаю лишнее

а 35 это откуда?

Спустя 3 часа, 40 минут, 44 секунды (12.05.2009 - 01:01) grefon написал(а):
Viking СПАСИБО! Получилось.

P.S. 35 - это сколько мне нужно было точек пропустить сверху изображения. Там переменная будет стоят. А пока я туда свои подсчеты для конкретной фотки втулил. Еще раз спасибо!

Спустя 1 год, 1 месяц, 9 дней, 13 часов, 14 минут, 11 секунд (21.06.2010 - 14:15) Гость_Алексей написал(а):
Добрый день.
Проблема следующая.
Есть код:
function imageResize($image, $newWidth, $newHeight) {

$image=urldecode($image);
$size = GetImageSize($image);

$width = $size[0];
$height = $size[1];

if($width>$height){
$need_ratio = $width/$newWidth;
$n_width = $newWidth;
$n_height = $height/$need_ratio;
$ofset_y = ($newHeight - $n_height)/2;

if($n_height>$newHeight){
$need_ratio = $height/$newHeight;
$n_width = $width/$need_ratio;
$n_height = $newHeight;
$ofset_x = ($newWidth - $n_width)/2;
$ofset_y = ($newHeight - $n_height)/2;
}
}
else {
$need_ratio = $height/$newHeight;
$n_width = $width/$need_ratio;
$n_height = $newHeight;
$ofset_x = ($newWidth - $n_width)/2;

if($n_width>$newWidth){
$need_ratio = $width/$newWidth;
$n_width = $newWidth;
$n_height = $height/$need_ratio;
$ofset_y = ($newHeight - $n_height)/2;
$ofset_x = ($newWidth - $n_width)/2;
}
}

if($size[2]==IMAGETYPE_GIF){
$src = ImageCreateFromGif($image);
}
else if($size[2]==IMAGETYPE_JPEG){
$src = ImageCreateFromJpeg($image);
}
else {
$src = ImageCreateFromPNG($image);
}
$dst = ImageCreateTrueColor($newWidth,$newHeight);
$background_color = imagecolorallocate($dst, 255, 255, 255);
imagefilledrectangle($dst, 0,0, $newWidth, $newHeight, $background_color);

ImageCopyResampled($dst, $src, $ofset_x, $ofset_y, 0, 0,
$n_width,$n_height,$width,$height);

if($size[2]==IMAGETYPE_GIF){
header("Content-type: image/gif");
ImageGif($dst);
}
else if($size[2]==IMAGETYPE_JPEG){
header("Content-type: image/jpeg");
ImageJpeg($dst, null, 100);
}
else {
header("Content-type: image/png");
ImagePNG($dst);
}
ImageDestroy($src);
ImageDestroy($dst);
}


Превью не выводится. Причем если убираю header -получаю положенную абракадабру.
Тот же самый код на другом сайте успешно работает. Где искать косяк?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.