Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 21.03.2012, 02:27   #1
 Разведчик
Аватар для nokiadu44
 
nokiadu44 никому не известный тип
Регистрация: 01.02.2012
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для nokiadu44 с помощью ICQ Отправить сообщение для nokiadu44 с помощью Skype™
 
Cool Генерация изображений в php

Надеюсь, вы прекрасно осознаете, что нельзя вот так вот просто взять и вывести картинку посреди HTML-кода в том же самом скрипте (если не осознаете, прочтите внимательно эту статью): в HTML-документе мы разместим, как и обычно, тэг <img>, а в его атрибуте src укажем не картинку, как обычно, а PHP-скрипт:
Код:
<img src="/i/articles/image/image.php">
Теперь приступим к написанию этого самого image.php.

Заголовок. Он же header.

Прежде всего, как браузер узнает, что image.php - это не HTML-документ и не что-то еще, а картинка?

Тип документа броузер определяет по заголовку Content-type. На самом деле, этот заголовок - обязательный и всегда присуствует; по умолчанию, PHP услужливо "отдает" заголовок Content-type: text/html. Обычно это поведение PHP нам прекрасно подходит - но не в данном случае. Придется нам вывести нужный заголовок самим:
Код:
<?php
  header('Content-type: image/png'); // устанавливаем тип документа - "изображение в формате PNG".
?>
Создание изображения

Для создания изображения, в нашем распоряжении две функции:

1. imagecreate(). С помощью этой функции можно создать изображение на основе палитры, содержащей фиксированный набор цветов. Каждый цвет палитры необходимо описать с помощью функции imagecolorallocate(). Этот способ создания изображения был единственным при работе с первой версией GD, и необходим при работе с ориентированными на палитру форматами, такими как GIF. Однако введенный во второй версии (и отныне рекомендуемый разработчиками) способ, на мой взгляд, гораздо более удобен.

2. imagecreatetruecolor(). Эта функция создает TrueColor-изображение, то есть цвет каждой точки определяется произвольным цветом, задаваемым в координатах RGB. Помимо того, что это удобнее, чем работа с палитрой, такой подход позволяет производить масштабирование изображения с гораздо меньшими потерями качества. Но об этом позже. Сейчас просто создадим изображение:
Код:
<?php
  $image = imagecreatetruecolor(80,60) // создаем изображение...
    or die('Cannot create image');     // ...или прерываем работу скрипта в случае ошибки

  imagedestroy($image);                // освобождаем память, выделенную для изображения
?>
Функция imagecreatetruecolor (как, кстати, и функция imagecreate), принимает два обязательных целочисленных параметра - ширину (в нашем примере - 80 пикселей) и высоту (60 пикселей) картинки, и возвращает идентификатор ресурса (в данном случае - изображения), который мы присваиваем переменной $image, которой в дальнейшем будем постоянно пользоваться.

Если по какой-либо страшной причине (недостатке памяти, например) создать изображение не получается, функция возвращает false - в этом случае мы прерываем работу скрипта.

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

Немножко порисуем

Итак, с помощью функции imagecreatetruecolor() мы создали "труколорное" и, если верить документации, черное изображение размером 80x60. Так что, те, в чьи планы входит создание Web-галереи репродукций "квадрата Малевича", могут смело переходить к следующей главе. Для остальных, продолжим. Нарисуем на картинке что-нибудь содержательное.
Код:
<?php

  $image = imagecreatetruecolor(80,60) // создаем изображение... 
    or die('Cannot create image');     // ...или прерываем работу скрипта в случае ошибки 


  // "Зальем" фон картинки синим цветом...
  imagefill($image, 0, 0, 0x000080);
  // Нарисуем желтый контурный эллипс...
  imageellipse($image, 40, 30, 50, 50, 0xFFFF00);
  // ...и еще пару, но сплошных...
  imagefilledellipse($image, 30, 20, 10, 10, 0xFFFF00);
  imagefilledellipse($image, 50, 20, 10, 10, 0xFFFF00);
  // ...вертикальную линию...
  imageline($image, 40, 28, 40, 38, 0xFFFF00);
  // ...и дугу.
  imagearc($image, 40, 30, 40, 40, 45, 135, 0xFFFF00);

  // Устанавливаем тип документа - "изображение в формате PNG"...
  header('Content-type: image/png'); 
  // ...И, наконец, выведем сгенерированную картинку в формате PNG:
  imagepng($image);

  imagedestroy($image);                // освобождаем память, выделенную для изображения

?>
Палка, палка, огуречик, вот и вышел человечек
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Хостинг изображений от Zhyk.Ru Zhyk Новости 1 09.10.2016 19:41
[Обсуждение] Хостинг изображений от Zhyk.Ru Zhyk О портале Zhyk.Ru 21 13.01.2013 17:05
Генерация линков pixfid Вопросы и ответы, обсуждения 7 23.11.2011 18:49
[Помогите!] C# Быстрая генерация чисел xFroLx Вопросы и ответы, обсуждения 15 18.10.2010 11:34

Заявление об ответственности / Список мошенников

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

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net