Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#38 used as offset, casting to integer (38) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Масштабирование изображения
ТвойWeb » WebMaster класс » PHP/Perl » Масштабирование изображения

Страниц (2): [1] 2 »
 

1. Aleksej - 07 Апреля, 2006 - 08:39:39 - перейти к сообщению
Задача следующая: на сервере есть графический файл. Мне нужно выдать картинку, подогнав ее размеры под заранее заданные. И так, решение следующее:
CODE:
$img = ImageCreateFromJpeg ($imgname);
$res = ImageCreate ($sketchwidth, $sketchheight);
ImageCopyResized ($res, $img, 0, 0, 0, 0, $sketchwidth, $sketchheight, ImageSX ($img), ImageSY ($img));
@header ("Content-type: image/jpeg");
ImageJpeg ($res);
ImageDestroy ($img);
ImageDestroy ($res);

Но в итоге картинка получается двухцветная (какая-то сине-голубая). Проблема в том, что для созданного приемника ($res) не определена палитра, а при копировании палитра не капируется (судя по результату).
И как же быть? Есть ли функция для того, что бы скопировать палитру с одного изображения на другое? Или может есть другое решение задачи?
Еще один вопрос: как изменить размеры холста? Если это удастся, то все операции можно будет провести на канве $img (а там-то палитра должна быть нормальной), а в итоге просто подогнать размеры.
2. Aleksej - 07 Апреля, 2006 - 11:08:32 - перейти к сообщению
Проблема решилась:
$res = ImageCreateTrueColor ($sketchwidth, $sketchheight);
3. TvoyWeb - 07 Апреля, 2006 - 16:06:00 - перейти к сообщению
Я использую такой код (может пригодится)
CODE:
function create_tmb($bigimgsrc,$trumbalis){
$quality = 100;
$width = 148;
$height = 118;
$size = @getimagesize($bigimgsrc);

$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;
$x_gut = 0;
$y_gut = 0;
$x_proporcia = $size[0]/$width;
$y_proporcia = $size[1]/$height;
$actual_height = (($x_proporcia*$height) < $size[1]) ? $x_proporcia*$height : $size[1];
$actual_width = (($y_proporcia*$width) < $size[0]) ? $y_proporcia*$width : $size[0];

$bigimg = $icfunc($bigimgsrc);
$trumbcreate = imagecreatetruecolor($width, $height);

imagecopyresampled($trumbcreate, $bigimg, 0, 0, 0, 0, $width, $height, $actual_width, $actual_height);

imagejpeg($trumbcreate,$trumbalis,$quality);
flush();
imagedestroy($bigimg);
imagedestroy($trumbcreate);
return true;
}
4. Aleksej - 08 Апреля, 2006 - 05:28:27 - перейти к сообщению
TvoyWeb
Спасибо, кое-что из этого кода мне действительно пригодилось.
А что за функция такая: imagecopyresampled? Я использую ImageCopyResized и заметил, что приведенная тобой функция работает раз в 10 (!) медленнее, а эффект тот же самый Улыбка
5. ETC - 08 Апреля, 2006 - 06:29:12 - перейти к сообщению
resampled качественне во столько же раз.
6. Aleksej - 08 Апреля, 2006 - 07:55:00 - перейти к сообщению
ETC
Для маленького эскиза это непринципиально, а вот ждать по 2 сек. на каждый эскиз - не есть хорошо. Лучше ImageCopyResized, который это делает за 0.5 сек Подмигивание
7. TvoyWeb - 08 Апреля, 2006 - 10:18:21 - перейти к сообщению
Aleksej пишет:
а вот ждать по 2 сек

Что-то я такого не замечал.
Aleksej пишет:
на каждый эскиз - не есть хорошо.

Не есть хорошо каждую превьюшку выводить на странице этой функцией. Лучше при аплоаде файлов делать копию превьюшки в отдельную папку и потом ее выводить обычным HTML'ем.
8. SviMik - 08 Апреля, 2006 - 10:21:27 - перейти к сообщению
Aleksej пишет:
а вот ждать по 2 сек

А сервер наверняка P-2 266мгц. Я угадал?
9. Aleksej - 08 Апреля, 2006 - 11:21:56 - перейти к сообщению
Цитата:
А сервер наверняка P-2 266мгц. Я угадал?

Нет, сервер - мой комп (Celeron 1700 512 ram 160 Gb HDD Улыбка )

Еще пара вопросов:
1. Что делает функция flush()?
2. Как мне сохранить обработанное изображение на диск (на сервере)?
10. TvoyWeb - 08 Апреля, 2006 - 12:40:41 - перейти к сообщению
Aleksej пишет:
Еще пара вопросов:
1. Что делает функция flush()?
2. Как мне сохранить обработанное изображение на диск (на сервере)?

flush сбрасывает на диск.
А сохранить.... функция которую я тебе привел как раз и сохраняет превьюшку в файл.

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0385]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33