Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: обработка изображения
 
 автор: AlexSol   (29.12.2006 в 19:59)   письмо автору
 
 

возможно ли средствами пхп сделать такое:
есть изображение png с прозрачными областями.нужно с четырех краев обрезать строки и столбцы, в которых только прозрхчные пиксели.
пример в аттаче: из изображения 190*218 получить 80*67

   
 
 автор: ddhvvn   (29.12.2006 в 20:05)   письмо автору
 
   для: AlexSol   (29.12.2006 в 19:59)
 

Насколько я помню, GD не позволяет работать с прозрачными изображениями.
Хотя может я ошибаюсь.

   
 
 автор: AlexSol   (29.12.2006 в 20:19)   письмо автору
 
   для: ddhvvn   (29.12.2006 в 20:05)
 

склеить два png у которых есть прозрачные/полупрозрачные области можно, а вот как отследить что этот пиксель прозрачен и произвести обрезание я не знаю...

   
 
 автор: ddhvvn   (29.12.2006 в 20:37)   письмо автору
 
   для: AlexSol   (29.12.2006 в 20:19)
 

Нашел только как задать прозрачный цвет - через функцию imagecolortransparent.

   
 
 автор: /|\';..;'/|\   (29.12.2006 в 22:17)   письмо автору
 
   для: AlexSol   (29.12.2006 в 19:59)
 

Прозрачный белый цвет имеет индекс 2147483647. Его можно получить функцией imagecolorat(). Нужно в цикле перебирать все строки и обрывать цикл, если в этой строке есть цвет, отличный от 2147483647. Эта строка и будет началом рисунка. А всё, что сверху - прозрачная область.

   
 
 автор: /|\';..;'/|\   (29.12.2006 в 22:44)   письмо автору
1.5 Кб
 
   для: AlexSol   (29.12.2006 в 19:59)
 

Например так.

   
 
 автор: AlexSol   (01.01.2007 в 11:07)   письмо автору
 
   для: /|\';..;'/|\   (29.12.2006 в 22:44)
 

загвоздка в определение - прозрачен цвет или нет. ImageColorAt для прозрачного и для белого выдают 2147483647.

есть ли другой способ понять прозрачен пиксель или нет?

   
 
 автор: AlexSol   (01.01.2007 в 14:56)   письмо автору
 
   для: AlexSol   (01.01.2007 в 11:07)
 

вот еще вопрос: если делать изображение на основе чего-то , то работает. а если создавать новое - то нет.

это работает:

header("Content-type: image/png");
$string = 'test';
$im    = imagecreatefrompng("images/kub.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px    = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);


а это нет уже

header ("Content-type: image/png");
$im = imagecreatetruecolor(50, 100);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  "A Simple Text String", $text_color);
imagepng($im);
imagedestroy($im);

-рисует область под размер изображения с крестиком в углу.

   
 
 автор: /|\';..;'/|\   (02.01.2007 в 01:12)   письмо автору
 
   для: AlexSol   (01.01.2007 в 14:56)
 

<?
header
("Content-type: image/png");
$string 'test';
$im    imagecreatetruecolor(100100);
$orange imagecolorallocate($im22021060);
$px    = (imagesx($im) - 7.5 strlen($string)) / 2;
imagestring($im3$px9$string$orange);
imagepng($im);
imagedestroy($im);
Так работает?

   
 
 автор: /|\';..;'/|\   (02.01.2007 в 01:12)   письмо автору
 
   для: AlexSol   (01.01.2007 в 11:07)
 

> ImageColorAt для прозрачного и для белого выдают 2147483647.
Нет. Прикрепляю пример. Пиксел (0, 0) белый, (0, 1) прозрачный.
<?
$im 
imagecreatefrompng("samp.png");
print 
imagecolorat($im00)."<br/>";
print 
imagecolorat($im01);


Пиксел прозрачен (полупрозрачен), если его код > 16777215. А 16777215 - это белый цвет.

Однако же мой скрипт выполнил поставленную задачу.

   
 
 автор: AlexSol   (02.01.2007 в 08:25)   письмо автору
 
   для: /|\';..;'/|\   (02.01.2007 в 01:12)
 

спасибо, разобрался.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования