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

Форум PHP

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

 

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

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

тема: GDLib: рисование на PHP
 
 автор: tAleks   (10.05.2009 в 11:44)   письмо автору
35.8 Кб
 
 

Вопрос 1.

Вот такой код:

<?php
$file 
'../images/graph.png'// Подложка

$im imagecreatefrompng($file) or die ("Ошибка при создании изображения");
//$im = imagecreate(680, 500) or die ("Ошибка при создании изображения");

// Задаем цвета
$white imagecolorallocate($im255255255);
$black imagecolorallocate($im000);

// Рисуем линию
imageline($im5050200200$black);

header ("Content-type: image/png");
imagepng($im); 
?>


Если изображение создается из картинки:

$im = imagecreatefrompng($file) or die ("Ошибка при создании изображения");

То линия не рисуется, или рисуется но почему-то белым цветом.
(Картинка в прицепке)

А если изображение создается так:

$im = imagecreate(680, 500) or die ("Ошибка при создании изображения");


То черная линия рисуется. Почему так? И как в таком случае рисовать по готовому изображению?


Вопрос 2.

Подложка (изображение) из которого создаю холст в PHP, фактически весит 36 кб. А когда PHP из него делает изображение то оно весит 336 кб. Почему так? И как можно сжать изображение?

  Ответить  
 
 автор: sim5   (10.05.2009 в 14:36)   письмо автору
69.1 Кб
 
   для: tAleks   (10.05.2009 в 11:44)
 

Как ристовать я не знаю, а вот нарисовать на изображении линии нет проблем:
<?
$im 
imagecreatefrompng('ket.png');
$white imagecolorallocate($im255255255);
$black imagecolorallocate($im0,0,0);
$red imagecolorallocate($im25500);
$green imagecolorallocate($im02550);
$blue imagecolorallocate($im00255);
imageline ($im2204296204$white);
imageline ($im2208296208$black);
imageline ($im2212296212$red);
imageline ($im2216296216$green);
imageline ($im2220296220$blue);
header ("Content-type: image/png");
imagepng($im);
?>

При этом - исходное изображение весит 70 КБ, а если его записать после операции рисования, то оно будет весит немного больше, 71 КБ - добавлены новые данные. Но чтобы из 36 КБ получилось 336 КБ.... что же вы такое рисуете....

  Ответить  
 
 автор: tAleks   (10.05.2009 в 15:41)   письмо автору
 
   для: sim5   (10.05.2009 в 14:36)
 

Только что выполнил ваш код, с вашим изображением.
Размр сохраненного из IE8 изображения 196 кб. см. прицепку.

  Ответить  
 
 автор: tAleks   (10.05.2009 в 15:48)   письмо автору
 
   для: sim5   (10.05.2009 в 14:36)
 


<? 
$im 
imagecreatefrompng('graph.png'); 
// $im = imagecreatefrompng('ket.png'); 
$white imagecolorallocate($im255255255); 
$black imagecolorallocate($im0,0,0); 
$red imagecolorallocate($im25500); 
$green imagecolorallocate($im02550); 
$blue imagecolorallocate($im00255); 
imageline ($im2204296204$white); 
imageline ($im2208296208$black); 
imageline ($im2212296212$red); 
imageline ($im2216296216$green); 
imageline ($im2220296220$blue); 
header ("Content-type: image/png"); 
imagepng($im);
?> 


Заменил вашего кота, на свою картинку, которая прикреплена к первому посту. Эффект такой же, полосок нет.

По коту рисуется, а по моей картинке нет. В чем прикол?

  Ответить  
 
 автор: tAleks   (10.05.2009 в 15:53)   письмо автору
 
   для: tAleks   (10.05.2009 в 15:48)
 

Не, это уже реальный прикол. Только что скачал свою же картинку с первого поста, и выполнил этот код с нова - Полоски есть. А с этой же картинкой, с моей машины (первый исходник) - полосок нет.

  Ответить  
 
 автор: sim5   (10.05.2009 в 15:58)   письмо автору
70.6 Кб
 
   для: tAleks   (10.05.2009 в 15:48)
 

Не знаю, что у вас за приколы.... Вот что получается при сохранении, сравнивайте....

  Ответить  
 
 автор: tAleks   (10.05.2009 в 16:06)   письмо автору
 
   для: sim5   (10.05.2009 в 15:58)
 

Может это от операционки зависит, или еще от чего?
Я когда делаю сохранить изображение в файл с IE8. Он предлагает сохарить его untitled.bmp, а не png.

  Ответить  
 
 автор: sim5   (10.05.2009 в 16:10)   письмо автору
 
   для: tAleks   (10.05.2009 в 16:06)
 

Вы, извиняюсь, туфтой занимаетесь, потому так у вас и получается. Схранить на диск нужно средствами РНР:
imagepng($im, "imagename.png");
Либо, если из браузера, то передать соответствующие заголовки, чтобы браузер понимал какой тип файла ему сохранять.

  Ответить  
 
 автор: tAleks   (10.05.2009 в 16:17)   письмо автору
 
   для: sim5   (10.05.2009 в 16:10)
 

>Вы, извиняюсь, туфтой занимаетесь, потому так у вас и получается.

Нет, не туфтой, а изучением рисования на PHP.

>Схранить на диск нужно средствами РНР:
>imagepng($im, "imagename.png");

Нет, так не нужно. Меня интересует конечный размер для получателя, когда картинка отображается в его браузере.

>Либо, если из браузера, то передать соответствующие заголовки, чтобы браузер понимал какой тип файла ему сохранять.

А вот это разве нет тот самый заголовок, который говорит браузеру о типе файла?


header ("Content-type: image/png"); 

  Ответить  
 
 автор: sim5   (10.05.2009 в 16:58)   письмо автору
 
   для: tAleks   (10.05.2009 в 16:17)
 

Туфтой потому, что не говорите что значит в вашем случае "при сохранении файла...", как же можно понять о чем речь и почему у вас так?
Чтобы браузер (IE) сохранял в указанном формате, передайте еще заголовок:
header("Content-Disposition: inline; filename=имя и расширение файла");
Правда, если перед выводом изображения в браузер был старт сессии, то IE опять таки будет предлагать сохранение в формате .bmp.

  Ответить  
 
 автор: tAleks   (10.05.2009 в 16:14)   письмо автору
 
   для: sim5   (10.05.2009 в 15:58)
 

Кажется вычислил прикол с отсутствием полосок при рисовании.
Сохраняю изображение с фотошопа, в формате png-8, кол-во цветов 256. При этом, при сохранении справа есть палитра цветов, и она вся занята. И вот на этом изображении полоски не рисуются, а точнее все рисуются белым цветом.

Сохранил это же изображение с 128 цыветами, и все полоски разным цветом.

  Ответить  
Rambler's Top100
вверх

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