mirror of
https://github.com/php/doc-ru.git
synced 2025-07-30 12:57:40 +00:00
284 lines
10 KiB
XML
284 lines
10 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 3739933b8c796d45aad74410caebb2734dc00aa7 Maintainer: alien Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
|
||
<chapter xml:id="imagick.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
&reftitle.examples;
|
||
<section xml:id="imagick.examples-1">
|
||
<title>Базовое использование</title>
|
||
<para>
|
||
Модуль Imagick чрезвычайно упрощает манипулирование изображениями в PHP через объектно-ориентированный
|
||
интерфейс. Вот короткий пример того, как сделать миниатюру:
|
||
<example>
|
||
<title>Создание миниатюры через объект Imagick</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
header('Content-type: image/jpeg');
|
||
|
||
$image = new Imagick('image.jpg');
|
||
|
||
// Если в качестве параметра ширины или высоты передать 0,
|
||
// соотношение сторон сохраняется
|
||
$image->thumbnailImage(100, 0);
|
||
|
||
echo $image;
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
|
||
<para>
|
||
С библиотекой SPL и другими объектно-ориентированными функциями, которые поддерживает модуль Imagick,
|
||
без усилий изменяют размер каждого файла в каталоге (полезно для пакетного изменения размера больших
|
||
цифровых изображений для просмотра на веб-страницах).
|
||
Пример изменяет размер, поскольку может потребоваться сохранить отдельные метаданные:
|
||
<example>
|
||
<title>Создание миниатюр для всех JPG-файлов в директории</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$images = new Imagick(glob('images/*.JPG'));
|
||
|
||
foreach($images as $image) {
|
||
// Передаём в метод thumbnailImage значение 0, чтобы сохранить соотношение сторон
|
||
$image->thumbnailImage(1024,0);
|
||
}
|
||
|
||
$images->writeImages();
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Этот пример создаёт отражение изображения.
|
||
Отражение создаётся зеркальным отображением и наложением градиента на нём.
|
||
Затем оригинальное изображение и его отражение накладываются на холст.
|
||
<example>
|
||
<title>Создание отражения</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
/* Чтение изображения */
|
||
$im = new Imagick("test.png");
|
||
|
||
/* Миниатюра изображения */
|
||
$im->thumbnailImage(200, null);
|
||
|
||
/* Создание рамки для изображения */
|
||
$im->borderImage(new ImagickPixel("white"), 5, 5);
|
||
|
||
/* Клонируем изображение и зеркально поворачиваем его */
|
||
$reflection = $im->clone();
|
||
$reflection->flipImage();
|
||
|
||
/* Создаём градиент. Это будет наложением для отражения */
|
||
$gradient = new Imagick();
|
||
|
||
/* Градиент должен быть достаточно большой для изображения и его рамки */
|
||
$gradient->newPseudoImage($reflection->getImageWidth() + 10, $reflection->getImageHeight() + 10, "gradient:transparent-black");
|
||
|
||
/* Наложение градиента на отражение */
|
||
$reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);
|
||
|
||
/* Добавляем прозрачность. Требуется ImageMagick 6.2.9 или выше */
|
||
$reflection->setImageOpacity( 0.3 );
|
||
|
||
/* Создаём пустой холст */
|
||
$canvas = new Imagick();
|
||
|
||
/* Холст должен быть достаточно большой, чтобы вместить оба изображения */
|
||
$width = $im->getImageWidth() + 40;
|
||
$height = ($im->getImageHeight() * 2) + 30;
|
||
$canvas->newImage($width, $height, new ImagickPixel("black"));
|
||
$canvas->setImageFormat("png");
|
||
|
||
/* Наложение оригинального изображения и отражения на холст */
|
||
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
|
||
$canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10);
|
||
|
||
/* Вывод изображения */
|
||
header("Content-Type: image/png");
|
||
echo $canvas;
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.similar;
|
||
<mediaobject>
|
||
<alt>Пример вывода: Создание отражения изображения</alt>
|
||
<imageobject>
|
||
<imagedata fileref="en/reference/imagick/figures/hello_world_reflection.png"/>
|
||
</imageobject>
|
||
</mediaobject>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Этот пример иллюстрирует, как использовать заливку во время рисования.
|
||
<example>
|
||
<title>Заливка текста градиентом</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
/* Создание нового объекта imagick */
|
||
$im = new Imagick();
|
||
|
||
/* Создание нового изображения. Будет играть роль шаблона заливки */
|
||
$im->newPseudoImage(50, 50, "gradient:red-black");
|
||
|
||
/* Создаём объект imagickdraw */
|
||
$draw = new ImagickDraw();
|
||
|
||
/* Запускаем новый шаблон с названием "gradient" */
|
||
$draw->pushPattern('gradient', 0, 0, 50, 50);
|
||
|
||
/* Смешиваем градиент с шаблоном */
|
||
$draw->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);
|
||
|
||
/* Закрываем шаблон */
|
||
$draw->popPattern();
|
||
|
||
/* Используем шаблон с названием «gradient» для заливки */
|
||
$draw->setFillPatternURL('#gradient');
|
||
|
||
/* Устанавливаем размер шрифта в 52 */
|
||
$draw->setFontSize(52);
|
||
|
||
/* Добавляем свой текст */
|
||
$draw->annotation(20, 50, "Hello World!");
|
||
|
||
/* Создаём новый объект холста и белое изображение */
|
||
$canvas = new Imagick();
|
||
$canvas->newImage(350, 70, "white");
|
||
|
||
/* Рисуем ImagickDraw на холсте */
|
||
$canvas->drawImage($draw);
|
||
|
||
/* устанавливаем чёрную рамку шириной 1px вокруг изображения */
|
||
$canvas->borderImage('black', 1, 1);
|
||
|
||
/* Устанавливаем формат PNG */
|
||
$canvas->setImageFormat('png');
|
||
|
||
/* Вывод изображения */
|
||
header("Content-Type: image/png");
|
||
echo $canvas;
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.similar;
|
||
<mediaobject>
|
||
<alt>Пример вывода: Заливка текста градиентом</alt>
|
||
<imageobject>
|
||
<imagedata fileref="en/reference/imagick/figures/hello_world.png"/>
|
||
</imageobject>
|
||
</mediaobject>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Работа с анимированными GIF-изображениями
|
||
<example>
|
||
<title>Чтение GIF-изображения и изменение размера каждого фрейма</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
/* Создание нового объекта imagick и чтение в GIF */
|
||
$im = new Imagick("example.gif");
|
||
|
||
/* Изменение размера всех фреймов */
|
||
foreach ($im as $frame) {
|
||
/* фреймы 50x50 */
|
||
$frame->thumbnailImage(50, 50);
|
||
|
||
/* Устанавливаем виртуальный холст для коррекции размера */
|
||
$frame->setImagePage(50, 50, 0, 0);
|
||
}
|
||
|
||
/* Обратите внимание, вызываем метод writeImages, а не writeImage */
|
||
$im->writeImages("example_small.gif", true);
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Работа с примитивом «эллипс» и пользовательскими шрифтами
|
||
<example>
|
||
<title>Создание PHP-логотипа</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
/* Установка ширины и высоты в пропорции логотипа PHP */
|
||
$width = 400;
|
||
$height = 210;
|
||
|
||
/* Создание объекта Imagick с поддержкой прозрачности */
|
||
$img = new Imagick();
|
||
$img->newImage($width, $height, new ImagickPixel('transparent'));
|
||
|
||
/* Новый объект ImagickDraw для отрисовки эллипса */
|
||
$draw = new ImagickDraw();
|
||
|
||
/* Установка пурпурного цвета заливки для эллипса */
|
||
$draw->setFillColor('#777bb4');
|
||
|
||
/* Задание размеров эллипса */
|
||
$draw->ellipse($width / 2, $height / 2, $width / 2, $height / 2, 0, 360);
|
||
|
||
/* Отрисовка эллипса */
|
||
$img->drawImage($draw);
|
||
|
||
/* Сброс цвета заливки с пурпурного на чёрный для текста (заметьте, что мы работаем с объектом ImagickDraw повторно) */
|
||
$draw->setFillColor('black');
|
||
|
||
/* Задание обводки границы белым цветом */
|
||
$draw->setStrokeColor('white');
|
||
|
||
/* Задание толщины обводки */
|
||
$draw->setStrokeWidth(2);
|
||
|
||
/* Задание кёрнинга (отрицательные значения означают, что буквы будут ближе друг к другу) */
|
||
$draw->setTextKerning(-8);
|
||
|
||
/* Задание шрифта и его размера, которые используются в логотипе PHP */
|
||
$draw->setFont('Handel Gothic.ttf');
|
||
$draw->setFontSize(150);
|
||
|
||
/* Центрирование текста вертикально и горизонтально */
|
||
$draw->setGravity(Imagick::GRAVITY_CENTER);
|
||
|
||
/* Добавление текста «php» со смещением по Y на -10 на холст (внутри эллипса) */
|
||
$img->annotateImage($draw, 0, -10, 0, 'php');
|
||
$img->setImageFormat('png');
|
||
|
||
/* Установка заголовка для PNG-файла и вывод изображения */
|
||
header('Content-Type: image/png');
|
||
echo $img;
|
||
|
||
?>
|
||
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.similar;
|
||
<mediaobject>
|
||
<alt>Приведённый пример выведет что-то похожее на:</alt>
|
||
<imageobject>
|
||
<imagedata fileref="en/reference/imagick/figures/php_logo.png"/>
|
||
</imageobject>
|
||
</mediaobject>
|
||
</example>
|
||
</para>
|
||
</section>
|
||
</chapter>
|