Работа с GDLib в PHP под Windows
Хотя задача стояла в реализации на ASP, которую я так и не решил, не нашел инфы, то я решил попробовать сделать при помощи PHP. Но потом возникла проблема - нигде толком я не встречал инфы про установку GDLib (содержащую функции по работе с имейджами) под Win32, писалось что еще надо доустановить какие-то вспомагательные либы (хотя как устанвливать не писалось) и все будет ОК. Надо было бы в php.ini раскоментировать строку extension=php_gd2.dll (убрать символ ; :D ), но сразу не заработало, короче говоря тема мутная без пива не пройдет...
Итого вкратце скажу: исправляйте ваши конфиги как написано ниже, и не морочьте себе голову заумными статьями ;) .
Значица так, моя платформа: Win2k, Apache-2.0.54, PHP-5.0.4, холодильник с пивом...
Установочные дириктории: c:\apache2; c:\php;
# конфиг httpd.conf находится в директории "c:\apache2\conf"
#1. подключить PHP как модуль Apache
#находите в тексте конфига строки AddType и #LoadModule и вставляете эти соответственно:
...
AddType application/x-httpd-php phtml php
...
LoadModule php5_module c:/php/php5apache2.dll
...
#2. объявление алиасов
ScriptAlias "/php/" "c:/php/"
#3.дальше по мелочи, просто проверяете их наличие и #соответствие :}
Port 80
ServerRoot "C:/Apache2"
DocumentRoot "C:/Apache2/htdocs"
<Directory />
Options FollowSymLinks Includes Indexes
AllowOverride All
</Directory>
DirectoryIndex index.html index.phtml index.php
# конфиг php.ini, после редактирования киньте его в c:\Windows (c:\WinNT), или как там у Вас...
#php.ini - основные поля, остальное default
#все ошибки будут отображаться, а замечания #игнорироваться
error_reporting = E_ALL & ~E_NOTICE
#для вывода ошибок в окно браузера
display_errors = On
#работа с переменными
variables_order = "EGPCS"
#
register_globals = On
#использование суперглобальных массивов (длинных)
register_long_arrays = On
#раскоментируйте следующий extension
extension=php_gd2.dll
#и бросьте эту dll ("c:\php\ext\php_gd2.dll") #в "c:\windows\system32"
#
#создайте в директории "C:/Apache2/htdocs", #например, файл index.php следующего содержания
<?php
phpinfo();
?>
#и запустите его из браузера на выполнение
http://localhost/index.php
#проверьте наличие поддержки библиотеки GD.
#параметры GD у меня:
GD Support - enabled
GD Version - bundled(2.0.28 compatible)
FreeType Support - enabled
FreeType Linkage - with freetype
FreeType Version - 2.1.9
GIF Read Support - enabled
GIF Create Support - enabled
JPG Support - enabled
PNG Support - enabled
WBMP Support - enabled
XBM Support - enabled
#
#Так вроде ничего не забыл...
#Да к слову, эта статья предназначены для #любителей php, всмысле для зеленых новичков, так #что экспертам просьба не заклевывать эту тему X)-
#
Возникла задача отобразить имеющиеся (динамические) данные графически, т.е. создание (генерирование PNG имейджа вчастности) картинки, на которой будут отображаться эти данные.
Хотя задача стояла в реализации на ASP, которую я так и не решил, не нашел инфы, то я решил попробовать сделать при помощи PHP. Но потом возникла проблема - нигде толком я не встречал инфы про установку GDLib (содержащую функции по работе с имейджами) под Win32, писалось что еще надо доустановить какие-то вспомагательные либы (хотя как устанвливать не писалось) и все будет ОК. Надо было бы в php.ini раскоментировать строку extension=php_gd2.dll (убрать символ ; :D ), но сразу не заработало, короче говоря тема мутная без пива не пройдет...
Итого вкратце скажу: исправляйте ваши конфиги как написано ниже, и не морочьте себе голову заумными статьями ;) .
Значица так, моя платформа: Win2k, Apache-2.0.54, PHP-5.0.4, холодильник с пивом...
Установочные дириктории: c:\apache2; c:\php;
# конфиг httpd.conf находится в директории "c:\apache2\conf"
#1. подключить PHP как модуль Apache
#находите в тексте конфига строки AddType и #LoadModule и вставляете эти соответственно:
...
AddType application/x-httpd-php phtml php
...
LoadModule php5_module c:/php/php5apache2.dll
...
#2. объявление алиасов
ScriptAlias "/php/" "c:/php/"
#3.дальше по мелочи, просто проверяете их наличие и #соответствие :}
Port 80
ServerRoot "C:/Apache2"
DocumentRoot "C:/Apache2/htdocs"
<Directory />
Options FollowSymLinks Includes Indexes
AllowOverride All
</Directory>
DirectoryIndex index.html index.phtml index.php
# конфиг php.ini, после редактирования киньте его в c:\Windows (c:\WinNT), или как там у Вас...
#php.ini - основные поля, остальное default
#все ошибки будут отображаться, а замечания #игнорироваться
error_reporting = E_ALL & ~E_NOTICE
#для вывода ошибок в окно браузера
display_errors = On
#работа с переменными
variables_order = "EGPCS"
#
register_globals = On
#использование суперглобальных массивов (длинных)
register_long_arrays = On
#раскоментируйте следующий extension
extension=php_gd2.dll
#и бросьте эту dll ("c:\php\ext\php_gd2.dll") #в "c:\windows\system32"
#
#создайте в директории "C:/Apache2/htdocs", #например, файл index.php следующего содержания
<?php
phpinfo();
?>
#и запустите его из браузера на выполнение
http://localhost/index.php
#проверьте наличие поддержки библиотеки GD.
#параметры GD у меня:
GD Support - enabled
GD Version - bundled(2.0.28 compatible)
FreeType Support - enabled
FreeType Linkage - with freetype
FreeType Version - 2.1.9
GIF Read Support - enabled
GIF Create Support - enabled
JPG Support - enabled
PNG Support - enabled
WBMP Support - enabled
XBM Support - enabled
#
#Так вроде ничего не забыл...
#Да к слову, эта статья предназначены для #любителей php, всмысле для зеленых новичков, так #что экспертам просьба не заклевывать эту тему X)-
#
Ну... Мы хоть и не эксперты, но холодильник у вас... Видать много пива вмещает. На самом деле всё гораздо проще. Даже без заумных статей. Надо только раскомментировать, на самом-то деле.
А всё остальное актуально только в рамках локального сервера. Сомневаюсь, что имея хостинг за $8.95 можно что-либо из предложенного решить самостоятельно, если пров не разрешит всё что угодно делать с .htaccess :D
всё это очень хорошо, но если чё, GD существует и для ASP.NET :)
Было бы хорошо услышать по-подробнее про GD под ASP :) . Или хотя бы ссылочки на инфу. А то задача есть, а опыта мало...вернее нету его.
Ну... Мы хоть и не эксперты, но холодильник у вас... Видать много пива вмещает. На самом деле всё гораздо проще. Даже без заумных статей. Надо только раскомментировать, на самом-то деле.
А всё остальное актуально только в рамках локального сервера. Сомневаюсь, что имея хостинг за $8.95 можно что-либо из предложенного решить самостоятельно, если пров не разрешит всё что угодно делать с .htaccess :D
Вообще-то пиво в моем холодильнике предназначено не для распития в момент работы, оно как-бы является стимулом, "приз на финише".
Веришь простое "раскомментировать" не помогло, только методом научного тыка - копи ту c:\windows\system32 работало, а то при запуске апачи выводило: "PHP Startup: Unable to load dynamic './php_gd2.dll - Не найден указанный модуль". У меня пхп запускается как модуль.
Насчет провайдерских хостов, то задача решалась в учебных целях (т.е. в домашних условиях, а там программер "бог и госпадин").
Вообще-то пиво в моем холодильнике предназначено не для распития в момент работы, оно как-бы является стимулом, "приз на финише".
Веришь простое "раскомментировать" не помогло, только методом научного тыка - копи ту c:\windows\system32 работало, а то при запуске апачи выводило: "PHP Startup: Unable to load dynamic './php_gd2.dll - Не найден указанный модуль". У меня пхп запускается как модуль.
Насчет провайдерских хостов, то задача решалась в учебных целях (т.е. в домашних условиях, а там программер "бог и госпадин").
Тогда понятно, почему раскомментирование не помогло...
Нет, ну я понимаю, ставить Perl, как часть Windows.... Но PHP-то зачем?
Тогда понятно, почему раскомментирование не помогло...
Нет, ну я понимаю, ставить Perl, как часть Windows.... Но PHP-то зачем?
Не ну если понимаешь - то скажи-напиши, ведь это форум, а не выставка, где нравиться-ненравиться...
А где в предложенных настройках строчка "extension_dir=...."? Я, может пропустил ее?
Да. И еще. Без объяснений и комментариев. Есть аксиома. Пока актуальная. Думаю, что не вечная: "Apache 2 не рекомендуется использовать ни с PHP4, ни с PHP5".
Как ни странно - проверил это на себе...
Хорошо.
А где в предложенных настройках строчка "extension_dir=...."? Я, может пропустил ее?
Да. И еще. Без объяснений и комментариев. Есть аксиома. Пока актуальная. Думаю, что не вечная: "Apache 2 не рекомендуется использовать ни с PHP4, ни с PHP5".
Как ни странно - проверил это на себе...
Лано не буду засорять эффир "мусором" разводя дискусии поповоду того, кто на что гаразд...Пробовал просто раскомментировать php_gd2.dll, но не заработало, причем потом вообще ругалось на загрузку модуля апачи, короче убил то, что работало. Может ты и прав на счет того, что "Apache 2 не рекомендуется использовать ни с PHP4, ни с PHP5" :(
Тогда есть такое предложение, сделать по-людски, написать все попорядку и сначала, так-что продолжай принимать в этом участие, раз уж начал, чтобы пост зря место не занимал. Начнем с версии апачи и пхп, мона выложить конфиги (с поддержкой gdlib) и примеры работы с изображениями.
Лано не буду засорять эффир "мусором" разводя дискусии поповоду того, кто на что гаразд...Пробовал просто раскомментировать php_gd2.dll, но не заработало, причем потом вообще ругалось на загрузку модуля апачи, короче убил то, что работало. Может ты и прав на счет того, что "Apache 2 не рекомендуется использовать ни с PHP4, ни с PHP5" :(
Тогда есть такое предложение, сделать по-людски, написать все попорядку и сначала, так-что продолжай принимать в этом участие, раз уж начал, чтобы пост зря место не занимал. Начнем с версии апачи и пхп, мона выложить конфиги (с поддержкой gdlib) и примеры работы с изображениями.
проверь в php.ini это =>
...
; Directory in which the loadable extensions (modules) reside.
extension_dir = ".\extensions"
...
_______________________________________
Содержание php_gd2.dll
exif_imagetype -- Determine the type of an image
exif_read_data -- Reads the EXIF headers from JPEG or TIFF. This way you can read meta data generated by digital cameras.
exif_thumbnail -- Retrieve the embedded thumbnail of a TIFF or JPEG image
gd_info -- Retrieve information about the currently installed GD library
getimagesize -- Get the size of an image
image_type_to_mime_type -- Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
image2wbmp -- Output image to browser or file
imagealphablending -- Set the blending mode for an image
imageantialias -- Should antialias functions be used or not
imagearc -- Draw a partial ellipse
imagechar -- Draw a character horizontally
imagecharup -- Draw a character vertically
imagecolorallocate -- Allocate a color for an image
imagecolorallocatealpha -- Allocate a color for an image
imagecolorat -- Get the index of the color of a pixel
imagecolorclosest -- Get the index of the closest color to the specified color
imagecolorclosestalpha -- Get the index of the closest color to the specified color + alpha
imagecolorclosesthwb -- Get the index of the color which has the hue, white and blackness nearest to the given color
imagecolordeallocate -- De-allocate a color for an image
imagecolorexact -- Get the index of the specified color
imagecolorexactalpha -- Get the index of the specified color + alpha
imagecolormatch -- Makes the colors of the palette version of an image more closely match the true color version
imagecolorresolve -- Get the index of the specified color or its closest possible alternative
imagecolorresolvealpha -- Get the index of the specified color + alpha or its closest possible alternative
imagecolorset -- Set the color for the specified palette index
imagecolorsforindex -- Get the colors for an index
imagecolorstotal -- Find out the number of colors in an image's palette
imagecolortransparent -- Define a color as transparent
imagecopy -- Copy part of an image
imagecopymerge -- Copy and merge part of an image
imagecopymergegray -- Copy and merge part of an image with gray scale
imagecopyresampled -- Copy and resize part of an image with resampling
imagecopyresized -- Copy and resize part of an image
imagecreate -- Create a new palette based image
imagecreatefromgd2 -- Create a new image from GD2 file or URL
imagecreatefromgd2part -- Create a new image from a given part of GD2 file or URL
imagecreatefromgd -- Create a new image from GD file or URL
imagecreatefromgif -- Create a new image from file or URL
imagecreatefromjpeg -- Create a new image from file or URL
imagecreatefrompng -- Create a new image from file or URL
imagecreatefromstring -- Create a new image from the image stream in the string
imagecreatefromwbmp -- Create a new image from file or URL
imagecreatefromxbm -- Create a new image from file or URL
imagecreatefromxpm -- Create a new image from file or URL
imagecreatetruecolor -- Create a new true color image
imagedashedline -- Draw a dashed line
imagedestroy -- Destroy an image
imageellipse -- Draw an ellipse
imagefill -- Flood fill
imagefilledarc -- Draw a partial ellipse and fill it
imagefilledellipse -- Draw a filled ellipse
imagefilledpolygon -- Draw a filled polygon
imagefilledrectangle -- Draw a filled rectangle
imagefilltoborder -- Flood fill to specific color
imagefontheight -- Get font height
imagefontwidth -- Get font width
imageftbbox -- Give the bounding box of a text using fonts via freetype2
imagefttext -- Write text to the image using fonts using FreeType 2
imagegammacorrect -- Apply a gamma correction to a GD image
imagegd2 -- Output GD2 image
imagegd -- Output GD image to browser or file
imagegif -- Output image to browser or file
imageinterlace -- Enable or disable interlace
imageistruecolor -- Finds whether an image is a truecolor image.
imagejpeg -- Output image to browser or file
imageline -- Draw a line
imageloadfont -- Load a new font
imagepalettecopy -- Copy the palette from one image to another
imagepng -- Output a PNG image to either the browser or a file
imagepolygon -- Draw a polygon
imagepsbbox -- Give the bounding box of a text rectangle using PostScript Type1 fonts
imagepscopyfont -- Make a copy of an already loaded font for further modification
imagepsencodefont -- Change the character encoding vector of a font
imagepsextendfont -- Extend or condense a font
imagepsfreefont -- Free memory used by a PostScript Type 1 font
imagepsloadfont -- Load a PostScript Type 1 font from file
imagepsslantfont -- Slant a font
imagepstext -- To draw a text string over an image using PostScript Type1 fonts
imagerectangle -- Draw a rectangle
imagerotate -- Rotate an image with a given angle
imagesavealpha -- Set the flag to save full alpha channel information (as opposed to single-color transparency) when saving PNG images.
imagesetbrush -- Set the brush image for line drawing
imagesetpixel -- Set a single pixel
imagesetstyle -- Set the style for line drawing
imagesetthickness -- Set the thickness for line drawing
imagesettile -- Set the tile image for filling
imagestring -- Draw a string horizontally
imagestringup -- Draw a string vertically
imagesx -- Get image width
imagesy -- Get image height
imagetruecolortopalette -- Convert a true color image to a palette image
imagettfbbox -- Give the bounding box of a text using TrueType fonts
imagettftext -- Write text to the image using TrueType fonts
imagetypes -- Return the image types supported by this PHP build
imagewbmp -- Output image to browser or file
iptcembed -- Embed binary IPTC data into a JPEG image
iptcparse -- Parse a binary IPTC http://www.iptc.org/ block into single tags.
jpeg2wbmp -- Convert JPEG image file to WBMP image file
png2wbmp -- Convert PNG image file to WBMP image file
read_exif_data -- Alias of exif_read_data()
проверь в php.ini это =>
...
; Directory in which the loadable extensions (modules) reside.
extension_dir = ".\extensions"
...
_______________________________________
Содержание php_gd2.dll
exif_imagetype -- Determine the type of an image
exif_read_data -- Reads the EXIF headers from JPEG or TIFF. This way you can read meta data generated by digital cameras.
exif_thumbnail -- Retrieve the embedded thumbnail of a TIFF or JPEG image
gd_info -- Retrieve information about the currently installed GD library
getimagesize -- Get the size of an image
image_type_to_mime_type -- Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
image2wbmp -- Output image to browser or file
imagealphablending -- Set the blending mode for an image
imageantialias -- Should antialias functions be used or not
imagearc -- Draw a partial ellipse
imagechar -- Draw a character horizontally
imagecharup -- Draw a character vertically
imagecolorallocate -- Allocate a color for an image
imagecolorallocatealpha -- Allocate a color for an image
imagecolorat -- Get the index of the color of a pixel
imagecolorclosest -- Get the index of the closest color to the specified color
imagecolorclosestalpha -- Get the index of the closest color to the specified color + alpha
imagecolorclosesthwb -- Get the index of the color which has the hue, white and blackness nearest to the given color
imagecolordeallocate -- De-allocate a color for an image
imagecolorexact -- Get the index of the specified color
imagecolorexactalpha -- Get the index of the specified color + alpha
imagecolormatch -- Makes the colors of the palette version of an image more closely match the true color version
imagecolorresolve -- Get the index of the specified color or its closest possible alternative
imagecolorresolvealpha -- Get the index of the specified color + alpha or its closest possible alternative
imagecolorset -- Set the color for the specified palette index
imagecolorsforindex -- Get the colors for an index
imagecolorstotal -- Find out the number of colors in an image's palette
imagecolortransparent -- Define a color as transparent
imagecopy -- Copy part of an image
imagecopymerge -- Copy and merge part of an image
imagecopymergegray -- Copy and merge part of an image with gray scale
imagecopyresampled -- Copy and resize part of an image with resampling
imagecopyresized -- Copy and resize part of an image
imagecreate -- Create a new palette based image
imagecreatefromgd2 -- Create a new image from GD2 file or URL
imagecreatefromgd2part -- Create a new image from a given part of GD2 file or URL
imagecreatefromgd -- Create a new image from GD file or URL
imagecreatefromgif -- Create a new image from file or URL
imagecreatefromjpeg -- Create a new image from file or URL
imagecreatefrompng -- Create a new image from file or URL
imagecreatefromstring -- Create a new image from the image stream in the string
imagecreatefromwbmp -- Create a new image from file or URL
imagecreatefromxbm -- Create a new image from file or URL
imagecreatefromxpm -- Create a new image from file or URL
imagecreatetruecolor -- Create a new true color image
imagedashedline -- Draw a dashed line
imagedestroy -- Destroy an image
imageellipse -- Draw an ellipse
imagefill -- Flood fill
imagefilledarc -- Draw a partial ellipse and fill it
imagefilledellipse -- Draw a filled ellipse
imagefilledpolygon -- Draw a filled polygon
imagefilledrectangle -- Draw a filled rectangle
imagefilltoborder -- Flood fill to specific color
imagefontheight -- Get font height
imagefontwidth -- Get font width
imageftbbox -- Give the bounding box of a text using fonts via freetype2
imagefttext -- Write text to the image using fonts using FreeType 2
imagegammacorrect -- Apply a gamma correction to a GD image
imagegd2 -- Output GD2 image
imagegd -- Output GD image to browser or file
imagegif -- Output image to browser or file
imageinterlace -- Enable or disable interlace
imageistruecolor -- Finds whether an image is a truecolor image.
imagejpeg -- Output image to browser or file
imageline -- Draw a line
imageloadfont -- Load a new font
imagepalettecopy -- Copy the palette from one image to another
imagepng -- Output a PNG image to either the browser or a file
imagepolygon -- Draw a polygon
imagepsbbox -- Give the bounding box of a text rectangle using PostScript Type1 fonts
imagepscopyfont -- Make a copy of an already loaded font for further modification
imagepsencodefont -- Change the character encoding vector of a font
imagepsextendfont -- Extend or condense a font
imagepsfreefont -- Free memory used by a PostScript Type 1 font
imagepsloadfont -- Load a PostScript Type 1 font from file
imagepsslantfont -- Slant a font
imagepstext -- To draw a text string over an image using PostScript Type1 fonts
imagerectangle -- Draw a rectangle
imagerotate -- Rotate an image with a given angle
imagesavealpha -- Set the flag to save full alpha channel information (as opposed to single-color transparency) when saving PNG images.
imagesetbrush -- Set the brush image for line drawing
imagesetpixel -- Set a single pixel
imagesetstyle -- Set the style for line drawing
imagesetthickness -- Set the thickness for line drawing
imagesettile -- Set the tile image for filling
imagestring -- Draw a string horizontally
imagestringup -- Draw a string vertically
imagesx -- Get image width
imagesy -- Get image height
imagetruecolortopalette -- Convert a true color image to a palette image
imagettfbbox -- Give the bounding box of a text using TrueType fonts
imagettftext -- Write text to the image using TrueType fonts
imagetypes -- Return the image types supported by this PHP build
imagewbmp -- Output image to browser or file
iptcembed -- Embed binary IPTC data into a JPEG image
iptcparse -- Parse a binary IPTC http://www.iptc.org/ block into single tags.
jpeg2wbmp -- Convert JPEG image file to WBMP image file
png2wbmp -- Convert PNG image file to WBMP image file
read_exif_data -- Alias of exif_read_data()
#Значица так, у меня путя такой:
extension_dir = "c:/php/ext"
#и бля все работает...я уже не знаб в че верить
#Во-первых: шоб не рыскать пару статей с
#примерами по работе с изображениями на #PHP, "авторство" остается за авторами
#(Обработка изображений в PHP.zip, Работа с #графикой в PHP.zip)
Еще в скором времени выложу в томже .chm уроки по "Работа с изображениями в PHP",
12-уроков, авторство: mike, codenet.ru, может выложу все 14-уроков, если автор
выложет. А вот спецификация по функциям GDLib выложить не удалось, не захотело
присоединять файлик на 450к, выложу уже полностью готовую в формате .chm на
русском языке (GDLib.zip).