PHP 8.4.1 Released!

Temel kullanım

Imagick PHP'de görüntü işlemlerini nesne yönelimli arayüzü sayesinde oldukça kolaylaştırır. Burada bir görüntünün küçük bir örneğinin nasıl elde edildiği gösterilmiştir:

Örnek 1 - Imagick ile görüntü örneği (thumbnail) oluşturmak

<?php

header
('Content-type: image/jpeg');

$görüntü = new Imagick('görüntü.jpg');

// Genişlik veya yükseklik olarak 0 verilmişse
// enboy oranı korunur
$görüntü->thumbnailImage(100, 0);

echo
$image;

?>

Imagick'teki SPL ve nesne yönelimli özellikler kullanarak bir dizin içindeki tüm görüntü dosyaları kolayca yeniden boyutlandırılabilir (Büyük sayısal kamera görüntülerini HTML sayfalarında izlenebilir boyuta indirmek gibi). Temel verileri kaybetmek istemediğimizden bu örnekte resize kullanıyoruz:

Örnek 2 - Bir dizindeki tüm JPG dosyalarının küçük örneklerinin elde edilmesi

<?php

$görüntüler
= new Imagick(glob('images/*.JPG'));

foreach(
$görüntüler as $görüntü) {

// 0, görüntünün enboy oranına uyulmasını sağlar
$görüntü->thumbnailImage(1024,0);

}

$görüntüler->writeImages();

?>

Burada bir görüntünün yansımasının oluşturulması örneklenmiştir. Yansıtma için görüntünün simetriği alınıp derece derece koyulaşan bir maske uygulanmıştır. Hem özgün görüntü hem de simetriği aynı tuvalin üzerine yerleştirilmiştir.

Örnek 3 - Bir görüntünün yansımasının oluşturulması

<?php
/* Görüntüyü oku */
$im = new Imagick("test.png");

/* Görüntünün küçük örneğini oluştur */
$im->thumbnailImage(200, null);

/* Görüntüye bir çerçeve çizgisi çiz */
$im->borderImage(new ImagickPixel("white"), 5, 5);

/* Görüntüyü kopyalayıp simetriğini al */
$reflection = $im->clone();
$reflection->flipImage();

/* Yansımaya uygulanacak maskeyi oluştur */
$gradient = new Imagick();

/* Maske biraz büyük olmalı ve bir çerçevesi olmalı */
$gradient->newPseudoImage($reflection->getImageWidth() + 10,
$reflection->getImageHeight() + 10, "gradient:transparent-black");

/* Maskeyi yansımaya uygula */
$reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);

/* Biraz matlık ekle (ImageMagick 6.2.9 ve sonrası gerekir.) */
$reflection->setImageOpacity( 0.3 );

/* Boş bir tuval oluştur */
$canvas = new Imagick();

/* Tuval her iki görüntüyü de tutacak kadar büyük olmalı */
$width = $im->getImageWidth() + 40;
$height = ($im->getImageHeight() * 2) + 30;
$canvas->newImage($width, $height, new ImagickPixel("black"));
$canvas->setImageFormat("png");

/* Her iki görüntüyü tuval üzerinde birleştir */
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
$canvas->compositeImage($reflection, imagick::COMPOSITE_OVER,
20, $im->getImageHeight() + 10);

/* Görüntüyü çıktıla */
header("Content-Type: image/png");
echo
$canvas;
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Örneğin çıktısı: Bir görüntünün yansımasının oluşturulması

Aşağıdaki örnekte çizim sırasında örüntülerle görüntünün nasıl kaplandığı gösterilmiştir.

Örnek 4 - Metni bir örüntü ile kaplamak

<?php

/* Yeni bir görüntü nesnesi oluştur */
$im = new Imagick();

/* Örüntü olarak kullanılacak yeni görüntüyü oluştur */
$im->newPseudoImage(50, 50, "gradient:red-black");

/* Bir çizim nesnesi oluştur */
$draw = new ImagickDraw();

/* Örüntüyü "gradient" ismiyle oluştur */
$draw->pushPattern('gradient', 0, 0, 50, 50);

/* Örüntüyle maskeyi birleştir */
$draw->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);

/* Örüntüyü kapat */
$draw->popPattern();

/* "gradient" örüntüsü ile görüntüyü kapla */
$draw->setFillPatternURL('#gradient');

/* Yazı tipi boyu 52 olsun */
$draw->setFontSize(52);

/* Bir şeyler yaz */
$draw->annotation(20, 50, "Hello World!");

/* Beyaz zeminli bir tuval oluştur */
$canvas = new Imagick();
$canvas->newImage(350, 70, "white");

/* Çizimi tuvalin üzerine yerleştir */
$canvas->drawImage($draw);

/* Görüntüye çerçeve olarak 1px kalınlığında siyah çizgi çiz */
$canvas->borderImage('black', 1, 1);

/* Görüntünün dosya biçemi PNG olsun*/
$canvas->setImageFormat('png');

/* Görüntüyü çıktıla */
header("Content-Type: image/png");
echo
$canvas;
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Örneğin çıktısı: Metni bir örüntü ile kaplamak

Canlandırmalı GIF görüntüleri ile çalışmak.

Örnek 5 - GIF görüntüyü okumak ve tüm kareleri boyutlandırmak

<?php

/* Yeni bir imagick nesnesi oluşturup GIF görüntüyü okut */
$im = new Imagick("example.gif");

/* Tüm görüntü karelerini boyutlandır */
foreach ($im as $frame) {
/* 50x50 kareler */
$frame->thumbnailImage(50, 50);

/* Sanal tuvali doğru boyuta ayarla */
$frame->setImagePage(50, 50, 0, 0);
}

/* writeImage yerine writeImages kullanılıyor! */
$im->writeImages("example_small.gif", true);
?>

Elips ilkeli ve özel yazı tipleriyle çalışma

Örnek 6 - PHP logosu yapımı

<?php
/* Genişliği ve yüksekliği orijinal PHP logosuyla orantılı olarak ayarla */
$width = 400;
$height = 210;

/* Imagick nesnesini şeffaf tuval ile oluştur */
$img = new Imagick();
$img->newImage($width, $height, new ImagickPixel('transparent'));

/* Elips çizmek için yeni ImagickDraw örneği */
$draw = new ImagickDraw();
/* Elips dolgu rengini eflatun yap */
$draw->setFillColor('#777bb4');
/* Elips boyutlarını ayarla */
$draw->ellipse($width / 2, $height / 2, $width / 2, $height / 2, 0, 360);
/* Elipsi tuvale aktar */
$img->drawImage($draw);

/* Metin için dolgu rengini siyah yap (Dikkat: ImagickDraw yeniden kullanılıyor) */
$draw->setFillColor('black');
/* Kenar konturunu beyaz yap */
$draw->setStrokeColor('white');
/* Kenar konturunun kalınlığını ayarla */
$draw->setStrokeWidth(2);
/* Yazı tipi karakter aralığını ayarla (negatif değer yakınlaştırır) */
$draw->setTextKerning(-8);
/* PHP logosunda kullanılan yazı tipini ve boyutunu ayarla */
$draw->setFont('Handel Gothic.ttf');
$draw->setFontSize(150);
/* Metni düşey ve yatayda ortala */
$draw->setGravity(Imagick::GRAVITY_CENTER);

/* Merkez "php" yi -10'luk Y uzaklığıyla tuvale ekle (elipsin içinde) */
$img->annotateImage($draw, 0, -10, 0, 'php');
$img->setImageFormat('png');

/* PNG için uygun başlığı ekle ve görüntüyü çıktıla */
header('Content-Type: image/png');
echo
$img;
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Örneğin çıktısı: Imagick ile PHP logosu yapımı

add a note

User Contributed Notes 2 notes

up
36
vokseli
10 years ago
Be careful when loading multiple images by passing an array to a new Imagick object. This is from Example #2:

<?php

$images
= new Imagick(glob('images/*.JPG'));

?>

If you have lots of images inside the images folder, PHP will consume a lot of memory, ergo it is not recommended. I personally think it's a better idea to loop each image separately:

<?php

$image_files
= glob('images/*.JPG');

foreach (
$image_files as $image_file) {
$image = new Imagick($image_file);
// Do something for the image and so on...
}

?>

This way only a single image is fitted into the memory at a time.
up
18
inoshadi at gmail dot com
10 years ago
on Example #3 Creating a reflection of an image
----------------------------------------------------
/* Clone the image and flip it */
$reflection = $im->clone();
$reflection->flipImage();
----------------------------------------------------
it was using the Imagick::clone function

This function has been DEPRECATED as of imagick 3.1.0 in favour of using the clone keyword.

use below code instead:
----------------------------------------------------
/* Clone the image and flip it */
$reflection = clone $im;
$reflection->flipImage();
----------------------------------------------------

http://php.net/manual/en/imagick.clone.php
To Top