IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   График на PHP (https://www.imho.ws/showthread.php?t=90307)

Naked 02.08.2005 18:49

График на PHP
 
Можно ли как-нибудь построить график на php, то есть сделать страничку, которая выводит в виде графика допустим количество выпитых чашек кофе за месяц:) данные берутся из базы, но это не принципиально, главное, есть ли в php какой-нибудь графический модуль, или как это можно реализовать?

RaZEr 02.08.2005 18:54

http://www.php.net/gd

asdx 03.08.2005 07:21

Есть extension от rrd_tools. Рисует очень хорошие графики. но он использует свою rrd базу.

Naked 28.02.2006 20:41

Вроде у меня не установлен gd, видимо по этому и не работает...
вот, решил нарисовать график, воспользовался стандартным скриптом на php.net:
Цитата:

<?php

header("Content-type: image/png");
$string = $_GET['text'];
$im = imagecreatefrompng("images/button1.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);

?>
Но страница не отображает никаких рисунков, не подскажите, в чем может быть проблема? :help:

Al-x 28.02.2006 23:37

Так и не должно отображать, если ошибки:)
Скорее всего у тебя не существует файл "images/button1.png" - на его основе рисуется кнопка с текстом из $_GET['text'].
Это чуть ниже под примером на http://www.php.net/gd написано.

Naked 03.03.2006 21:01

написал такой скриптик:
Цитата:

<?php
$string = $_GET['text'];
$im = imagecreate(100, 100);
$orange = imagecolorallocate($im, 220, 210, 60);
$px = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
image2wbmp ($im, "file.bmp");
imagedestroy($im);
?>
в итоге в файл file.bmp ничего не появляется...:( если вместо image2wbmp пишу imagegif, то пишет, что такой функции не знает, помогите плиз, в чем ошибка... :help:

Saruman 04.03.2006 05:02

Цитата:

The_naked:
в итоге в файл file.bmp ничего не появляется..
у сервера права есть на создание файлов в данной директории? Кинул твой код в файл, запустил - все работает.
Цитата:

The_naked:
пишу imagegif, то пишет, что такой функции не знает
См. phpinfo(), строка "GIF ... Support". Некоторые версии gd (в частности, 1.6) не включают в себя поддержку gif.

Naked 04.03.2006 09:26

Цитата:

Saruman:
у сервера права есть на создание файлов в данной директории?
прав нет, но я создал file.bmp с правами 666, т.е. записывать он туда должен...
Цитата:

Saruman:
Кинул твой код в файл, запустил - все работает
так вот я и думаю, не может ли этого быть из-за кривого gd? :idontnow:

Saruman 05.03.2006 03:33

Цитата:

The_naked:
не может ли этого быть из-за кривого gd
gd либо есть, либо его нет. Не бывает, чтобы он создавал картинку, но не записывал ее в виде bmp. Замени вывод в файл на вывод в браузер и узнаешь, генерится что-то или нет.

InsaneX 05.03.2006 03:51

zakachay phpinfo(); na host i link syuda zaposti..

Naked 06.03.2006 17:51

Цитата:

InsaneX:
zakachay phpinfo(); na host i link syuda zaposti..
вот: _http://0969.ru/test.html

Saruman 06.03.2006 19:19

gd есть, GIF Create Support нет => создавать гифки не можешь. WBMP Support есть => создавать bmp можешь.
Следовательно, твой код должен работать. Далее см. мою предыдущую мессагу.

Naked 06.03.2006 19:21

Цитата:

Saruman:
Далее см. мою предыдущую мессагу.
когда я запускаю тот файл из командной строки, т.е. php script.php, то он пишет, что нет такой функции imagecreate()...:(

Hubbitus 07.03.2006 11:07

Цитата:

The_naked:
когда я запускаю тот файл из командной строки
А в cli-версии вполне могут быть другие настройки или собран с другими параметрами. Запусти это из той версии, phpinfo которой выложил на обозрение выше.

Saruman 07.03.2006 16:39

Цитата:

The_naked:
запускаю тот файл из командной строки
Цитата:

Saruman:
Замени вывод в файл на вывод в браузер
браузер - не командная строка, да?

Naked 08.03.2006 09:15

Цитата:

Saruman:
браузер - не командная строка, да?
заменял на вывод в броузер, тоже ничего не рисует, вообще ничего... :(

aoxyz_30330 08.03.2006 17:12

PHP код:

<?php
$text 
= (isset($_GET['text']) && !empty($_GET['text']))? $_GET['text']: '';

$size = array('x' => (isset($_GET['x']) && !empty($_GET['x']))? intval($_GET['x']): 100
              
'y' => (isset($_GET['y']) && !empty($_GET['y']))? intval($_GET['y']): 100
                          
);

$image loadPng('/home/bobo/public_html/button.png');
if(!
$image) return;
imagecolorallocate($image22021060);
$txt_color imagecolorallocate($image000);
$px floor(($size['x'] - 7.5 strlen($text)) / 2);

header('Content-type: image/png');
imagestring ($image3$px9$text$txt_color);
imagepng($image);
imagedestroy($image);


function 
loadPng ($pngpath) {

    global 
$size;
        
    
$image = @imagecreatefrompng ($pngpath); 
        
    if (!
$image) { 
        
$image  imagecreate ($size['x'], $size['y']);
        }
    return 
$image;
}
?>


Kvarx 28.03.2006 14:11

Решил не создавать новую тему, так как вопрос тоже по графике. Хочу на пхп с GD картинку из RGB в CMYK переделать.

http://php.rinet.ru/manual/ru/ref.image.php прочитал о ImageMagic кто-нибудь работал с ней?

Помогите плиз :help:

Hubbitus 28.03.2006 15:48

Цитата:

Kvarx:
http://php.rinet.ru/manual/ru/ref.image.php прочитал о ImageMagic кто-нибудь работал с ней?

Помогите плиз
Я работал, мне очень нравится.

поставленная задача:

Цитата:

Kvarx:
Хочу на пхп с GD картинку из RGB в CMYK переделать.
в ImageMagick'е решается элементарно:
convert -colorspace CMYK start.img finish.img

Kvarx 28.03.2006 16:43

Цитата:

Сообщение от Hubbitus
Я работал, мне очень нравится.

поставленная задача:

в ImageMagick'е решается элементарно:
convert -colorspace CMYK start.img finish.img

А на пхп это как будет выглядеть?
PHP код:

#здесь объявление  объекта-класса
$mgck_wnd NewMagickWand();
#как инклудить не очень понимаю

$fn1="start.jpeg";
$fn2="finish.jpeg";
MagickReadImage($mgck_wnd$fn1);

MagickSetImageColorspace($mgck_wnd,MW_CMYKColorspace);

MagickWriteImage($mgck_wnd$fn2)); 

Как-то так? :idontnow:

Hubbitus 29.03.2006 12:22

Цитата:

Kvarx:
Как-то так? :idontnow:
Ну да, типа того.
А можно и через шелл сразу типа
exec('convert -colorspace CMYK start.img finish.img');

Kvarx 29.03.2006 18:28

Спасибо.

Я посмотрел, что библиотека то на С++ написана, а PHP это типа дополнительно фичи. Мне просто надо очень много картинок перегнать, так что думаю, можно и на С++ заюзать функцию convert или все-таки пхп приделаю. Вообщем разберусь..

Вот только нужную виндовскую версию скачать :rolleyes:

Kvarx 01.04.2006 17:31

Цитата:

Сообщение от Hubbitus
в ImageMagick'е решается элементарно:
convert -colorspace CMYK start.img finish.img

Hubbitus
пишется команда немного по-другому
convert start.img -colorspace CMYK finish.img

Решил все-таки на С делать, но вот когда в Фотошопе открываю новую картинку - он пишет: The embeded ICC profile cannot be used because the ICC is invalid. Это просто можно пропустить, но тогда картинка открывается и получается намного бледнее исходной. В чем может быть дело?

Hubbitus 03.04.2006 10:49

Цитата:

Kvarx:
пишется команда немного по-другому
convert start.img -colorspace CMYK finish.img
Не обязательно. То что я дал, проверенно, рабочее. Просто, как чаще всего и бывает, порядок параметров не важен.

Цитата:

Kvarx:
The embeded ICC profile cannot be used because the ICC is invalid.
Ну что это за ошибка не знаю, а последний ImageMagick используешь? При конвертации он не выдает ошибок?



Ну и то что оно бледнее или ярче немного будет, дак оно будет полюбому - ты же меняешь набор цветов, они переводятся, и "подгоняются", тоесть чтобы было близко к оригиналу. Если бы они могли быть полностью идентичны, сам подумай, нафига бы столько придумывали различных цветовых моделей?
Цитата:

Kvarx:
Мне просто надо очень много картинок перегнать, так что думаю, можно и на С++ заюзать функцию convert
Цитата:

Kvarx:
Решил все-таки на С делать
Если нужно просто перегнать картинок кучу и ничего более, дак чего там писать, на том же Баше (Bash) из 4 строчек скрипт и вперед!

Kvarx 03.04.2006 16:24

Цитата:

Сообщение от Hubbitus
Не обязательно. То что я дал, проверенно, рабочее. Просто, как чаще всего и бывает, порядок параметров не важен.

У меня получались чернобелые картинки, причем справа сплошная полоса была черная.

Цитата:

Сообщение от Hubbitus
Ну что это за ошибка не знаю, а последний ImageMagick используешь? При конвертации он не выдает ошибок?

Баг видимо был в тестовой фотке, потому что для нужных картинок ошибки не выдается.

Цитата:

Сообщение от Hubbitus
Ну и то что оно бледнее или ярче немного будет, дак оно будет полюбому - ты же меняешь набор цветов, они переводятся, и "подгоняются", тоесть чтобы было близко к оригиналу. Если бы они могли быть полностью идентичны, сам подумай, нафига бы столько придумывали различных цветовых моделей?

Чтоб по походу печати не переводить, ведь CMYK для принтера намного удобнее. Разве трудно сопоставлять 3 числам 4 числа? Думаю, не очень.
Например, в фотошопе при переводе менее заметно отличие.

Цитата:

Сообщение от Hubbitus
Если нужно просто перегнать картинок кучу и ничего более, дак чего там писать, на том же Баше (Bash) из 4 строчек скрипт и вперед!

Я под виндой сижу, но по сути сделал то же самое. На пхп генерю бат-файл, а потом он у меня минут 20 работал.

Собираюсь на этом остановится пока. Спасибо.

Naked 07.04.2006 15:11

Потеря качетва при уменьшении фотки в gd
 
Народ, уменьшаю вот так фоту:
PHP код:

function convert_to_small ($filename){
  
$bfilename $filename;
  
$filename 'fotos/'.$filename;
  list(
$width$height) = getimagesize($filename);
  
$percent 100/$width;
  
$newwidth $width $percent;
  
$newheight $height $percent;
  
$thumb imagecreatetruecolor($newwidth$newheight);
  
$source imagecreatefromjpeg($filename);
  
imagecopyresized($thumb$source0000$newwidth$newheight$width$height);
  
imagejpeg($thumb'fotos/b'.$bfilename100);


В итоге получаю ужасное качество:
__http://alexia.tradetown.ru/, как можно сделать, чтобы уменьшенные фотки были хорошего качетва?...
Спасибо...

Kvarx 07.04.2006 17:42

The_Naked
PHP код:

if(imagecopyresampled($im2$im0000$newwidth$newheight$width$height)){
                        
ImageJpeg($im2$filename100);
                } 

Я вот так делаю, правда тоже не особо клевое качество.

ЗЫ Сайт ты неправильно написал __http://alexia.tradetown.ru/

brime 12.04.2006 21:44

Можно извратиться и использовать для уменьшения алгоритмы из компютерной графики...интерполяция и все такое

Naked 14.04.2006 16:53

Цитата:

Kvarx:
Я вот так делаю, правда тоже не особо клевое качество.
как не странно, но, когда нужно сделать маленькую фотку, то качество намного (!!!) лучше при использовании функции от Kvarx, а если фотка не очень маленькая, то моя функция справляется лучше :idontnow: Хотелось бы услышать комментарии по этому поводу более грамотных специалистов...

Цитата:

brime:
Можно извратиться и использовать для уменьшения алгоритмы из компютерной графики...интерполяция и все такое
Это был бы наилучший вариант, но все упирается во время и в неособое желание делать такую большую работу;)

Saruman 15.04.2006 11:39

Собственно, по поводу различия функций читаем мануал:
Цитата:

imagecopyresized
...If the source and destination coordinates and width and heights differ, appropriate stretching or shrinking of the image fragment will be performed.
Цитата:

imagecopyresampled
copies a rectangular portion of one image to another image, smoothly interpolating pixel values so that, in particular, reducing the size of an image still retains a great deal of clarity
Если вкратце - то imagecopyresampled интерполирует значения пикселов при изменении размера, чтобы получить более качественный результат, а imagecopyresized этого не делает.

psel 18.04.2006 19:00

imagecreatetruecolor() - вроде нормальное качество (хотя я не особо придирчив к нему):

function resize_image($width, $height, $source, $destination) {
$src = imagecreatefromjpeg($source);
$img = imagecreatetruecolor($width, $height);
imagecopyresampled($img, $src, 0, 0, 0, 0, $width, $height, imagesx($src),imagesy($src));
// @unlink($destination);
imageJPEG($img, $destination);
}


Часовой пояс GMT +4, время: 03:05.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.