GD – გამოსახულებასთან მუშაობა

GD – გამოსახულებასთან მუშაობა

PHP-ს შესაძლებლობები HTML-კოდის შექმნით არ შემოისაზღვრება. PHP სხვადასხვა ფორმატის, მათ შორის gif, png, jpg, wbmp და xpm, გამოსახულების შექმნისა და მანიპულირებისათვისაც შეიძლება იქნეს გამოყენებული. ამის გარდა, PHP შეუძლია გამოსახულება პირდაპირ ბრაუზერში გამოიტანოს. გამოსახულებასთან სამუშაოდ მომხმარებელს PHP ესაჭიროება GD გრაფიკულ ბიბლიოთეკასთან ერთად. იმის მიხედვით, თუ გამოსახულების რომელ ფორმატთან მუშაობს მომხმარებელი, GD და PHP შეიძლება სხვა ბიბლიოთეკებზეც იყოს დამოკიდებული.

JPEG, GIF, PNG, SWF, TIFF და JPEG2000 ფორმატის გამოსახულების ზომების მისაღებად PHP-ის სტანდარტული ფუნქცია არსებობს.

JPEG და TIFF გამოსახულებების სათაურებში შენახულ ინფორმაციასთან მუშაობა შესაძლებელია EXIF მოდელით. ამგვარად, ციფრული ფოტოაპარატებით გენერირებული მეტამონაცემების წაკითხვაა შესაძლებელი. EXIF მოდელი GD გრაფიკულ ბიბლიოთეკას არ საჭიროებს. აქვე უნდა შევნიშნოთ, რომ არც getimagesize() ფუნქცია არ საჭიროებს GD გრაფიკულ ბიბლიოთეკას.

GD გრაფიკული ბიბლიოთეკის არსებობის შემთხვევაში, მომხმარებელს გამოსახულების შექმნა და შეცვლა შეუძლია. გამოსახულების ფორმატი, რომელთანაც შესაძლებელია მუშაობა, დამოკიდებულია დაყენებულ GD-ის ვერსიასა და სხვა ბიბლიოთეკებზე, რომელთაც შეიძლება ამა თუ იმ ფორმატზე წვდომის მისაღებად GD-იმ მიმართოს. GD-1.6-ზე ქვემოთ GD-ის ვერსიები GIF გამოსახულებას მხარს უჭერს, მაგრამ მხარს არ უჭერს PNG-ს, მაშინ როდესაც GD-1.6-ის ზემოთ და GD-2.0.28-ის ქვემოთ მხარს უჭერს PNG-ს, მაგრამ მხარს არ უჭერს GIF-ს. GIF-ის მხარდაჭერა კვლავ GD-2.0.28 ვერსიაში აღდგა.

შენიშვნა: PHP 4.3 ვერსიიდან დაწყებული GD ბიბლიოთეკა PHP-ში ჩაშენებულია. ამ ჩაშენებულ ვერსიას რამდენიმე დამატებითი შესაძლებლობა აქვს. სახელდობრ, რეკომენდებულია ამ ჩაშენებული ვერსიის გამოყენება, ვინაიდან მისი კოდი უფრო სტაბილურია და მომხმარებლის მიერ უფრო მხარდაჭერილი.
გამოსახულების დასამუშავებელი ფუნქციები

PHP-ში გამოსახულების დასამუშავებელი ფუნქციები შეიძლება ორ კატეგორიად დაიყოს. ფუნქციები, რომლებიც მუშაობენ ფაილებთან და ფუნქციები, რომლებიც მუშაობენ გამოსახულებებთან მეხსიერებაში (რესურსთან).

აქ ყველას აღწერა შეუძლებელია. განვიხილოთ ზოგიერთი

მათგანი.

ფუნქცია imagecreatetruecolor ().

ამ ფუნქციის დანიშნულებაა ახალი ფერადი გამოსახულების შექმნა. იგი გამოსახულების წარმოდგენისა და შენახვის ისეთ მეთოდებს იყენებს, რომლებიც RGB ფორმატში ბევრი ფერის, ნახევარტონისა და სხვადასხვა შეფერილობის გამოყენების საშუალებას მოგვცემს. როგორც ცნობილია RGB ფორმატი ეს არის სამი საბაზო წითელი (Red), მწვანე (Green) და ლურჯი (Blue) ფერის გამოყენებით ნებისმიერი ფერის მიღების საშუალება. მისი სინტაქსია:

imagecreatetruecolor ( int $width , int $height )

imagecreatetruecolor () ფუნქცია არგუმენტად ორ მთელ რიცხვს იღებს. ეს არის ახალი გამოსახულების სიგრძე და სიგანე. ამ ფუნქციის შესრულების შედეგი შავი მართკუთხედი, ზომით იქნება $width$height.

თუ მომხმარებელს სხვა ფერის მართკუთხედი სჭირდება,

მაშინ მას მომდევნო ფუნქციის გამოყენება მოუხდება.

ფუნქცია imagecolorallocate ().

ეს ნიშნავს, რომ ამის შემდეგ გამოსახულებასთან ვიმუშავებთ უკვე მეხსიერებაში. ამის შემდეგ ეს იდენტიფიკატორი გადაეცემა უკვე imagecolorallocate () ფუნქციას, რომელიც ფერების წარმოდგენის გენერირებას იმ სახით ახდენს, რა სახითაც სურათზე  შემდგომი მუშაობის დროს გამოიყენება.

ამ ფუნქციის პირველი გამოძახება გამოსახულებას ფონს მისცემს.

imagecolorallocate ( resource $image , int $red , int $green , int $blue )

ამ ფუნქციის resource $image პირველი პარამეტრი, სწორედ ის იდენტიფიკატორია, რომელიც imagecreatetruecolor () ფუნქციის საშუალებით მივიღეთ. ეს პარამეტრი იმისთვისაა საჭირო, რომ ფერის წარმოდგენა გამოსახულების ფორმატს შეესაბამებოდეს. შემდეგი სამი პარამეტრი კი ჩვენთვის ცნობილია. ის არის რიცხვი 0-დან 255-მდე, რომელიც ფერს RGB სისტემაში გამოსახავს.

შავი ფერის მისაღებად სამი 0-იანი გვჭირდება, ხოლო თეთრი

ფერისათვის სამჯერ 255.

ამგვარად, შექმნილია გამოსახულება, მომზადებულია პალიტრა, ახლა უკვე საჭიროა შემოქმედებითი პროცესის დაწყება. გამოვიყენოთ ImageLine () ფუნქცია და ამ მართკუთხედში გავავლოთ ხაზები,            ხოლო თვით ფუნქცია          მოგვიანებით განვიხილოთ.

ქვემოთ მოყვანილია ამ ფუნქციების გამოყენების მაგალითი:

<?PHP 

// გამოსახულების შექმნა ზომით 100*100

$img = imagecreatetruecolor(100, 100);

// ზოგიერთი ფერის გამოყოფა

$red = imagecolorallocate($img, 255, 0, 0);

$green = imagecolorallocate($img,   0, 255,   0);

$blue = imagecolorallocate($img,   0, 0, 255);

// დახაზოს რამდენიმე მონაკვეთი

imageline($img, 40, 30, 40, 40, $green); imageline($img, 50, 30, 50, 40, $green); imageline($img, 45, 38, 45, 39, $green); imageline($img, 37, 45, 53, 45, $green); imageline($img, 37, 43, 37, 45, $green); imageline($img, 53, 43, 53, 45, $green);

// გამოსახულების ბრაუზერში გამოტანა  header(“Content-type: image/png”); imagepng($img);

// მეხსიერების გათავისუფლება imagedestroy($img);

?> 

ფუნქცია ImageLine ()

ამ ფუნქციის მეშვეობით ხდება წრფის მონაკვეთის გავლება. მისი ფორმატია:

imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

$image არგუმენტით ფუნქცია მეხსიერებაში მიმართავს imageCreateTrueColor () ფუნქციით და ფერის იდენტიფიკატორი imageColorAllocate () ფუნქციით შექმნილ გამოსახულებას. ხოლო $x1 არის წრფის მონაკვეთის საწყისი წერტილის x-კოორდინატი, $y1 –  საწყისი წერტილის y -კოორდინატი, $x2 – ბოლო წერტილის x-კოორდინატი, $y2 – ბოლო წერტილის y-კოორდინატი, $color – ხაზის ფერი, რომელიც ფერის იდენტიფიკატორი imageColorAllocate () ფუნქციითა შექმნილი.

მოცემული ფუნქცია მოქმედების წარმატებით დამთავრების შემთხვევაში შედეგად აბრუნებს TRUE-ს, ხოლო შეცდომის შემთხვევაში FALSE-ს.

ზუსტად ასე მუშაობს გამოსახულებასთან ყველა ფუნქცია.  ფუნქცია imagecopyresampled ()

ამ ფუნქციის მეშვეობით ხდება გამოსახულებიდან მისი

ნაწილის ამოჭრა. მისი ფორმატია:

imagecopyresampled ( resource $dst_image , resource

$src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

ეს ფუნქცია ერთი სურათიდან მართკუთხედს ამოჭრის, ცვლის მის ზომებს და სხვა სურათში სვამს. ეს ერთ-ერთი ყველაზე მრავალრიცხვოვანარგუმენტიანი ფუნქციაა.

$src_image, $dst_image – პირველი ორი არგუმენტი გვიჩვენებს საიდან უნდა ამოჭრას და სად ჩასვას. ორივე არგუმენტი მიუთითებს გამოსახულებაზე მეხსიერებაში.

$dst_x, $dst_y, $src_x, $src_y – ეს არის მართკუთხედის მარცხენა ზედა კუთხის კოორდინატები ახალ და ძველ გამოსახულებებზე.

$dst_w, $dst_h, $src_w, $src_h – ეს არის ამ მართკუთხედის სიმაღლე და სიგანე შესაბამისად ახალ და ძველ გამოსახულებებში. სხვა სიტყვებით რომ ვთქვათ, ფუნქცია მოძებნის $src_image სურათს, მასში ამოჭრის მართკუთხედს, რომლის მარცხენა ზედა კუთხე განთავსებულია წერტილში კოორდინატებით $src_x, $src_y და რომლის სიმაღლე და სიგანეა $src_w, $src_h. ამის შემდეგ, ამოჭრილ ნაწილს ფუნქცია უცვლის სიმაღლეს და სიგანეს ისე, რომ იგი შეესაბამებოდეს $dst_w, $dst_h რიცხვებს და მიღებულ მართკუთხედს $dst_image გამოსახულებაში ჩასვამს ისე, რომ მართკუთხედის ზედა მარცხენა წვერო განთავსებული იყოს წერტილში კოორდინატებით $dst_x, $dst_y.

ფუნქციები imagecreatefromgif (), imagecreatefrompng (), imagecreatefromjpeg ()

ეს ფუნქციები ფაილებიდან ან URL-მისამართიდან ახალ

გამოსახულებას ქმნიან. მათი ფორმატია:

imagecreatefromgif (string $filename) imagecreatefrompng (string  $filename)  imagecreatefromjpeg (string $filename)

ეს ფუნქციები შედეგად აბრუნებენ მოცემული $filename

ფაილიდან მიღებული გამოსახულების იდენტიფიკატორს.

აქვე ყურადღება გვინდა გავამახვილოთ იმაზე, რომ არსებობს გამოსახულებათა სხვა ფორმატებიც და მათთვის სხვა, მათი შესაბამისი, ფუნქციები გამოიყენება.

ფუნქცია imagegif ()

ამ ფუნქციის საშუალებით ინახება დამუშავებული გამოსახულება. Imagegif () ფუნქციას გამოსახულება ბრაუზერში ან ფაილში გამოჰყავს. მისი სინტაქსია:

imagegif (resource $image [, string $filename])

imagegif () ფუნქცია image გამოსახულებიდან GIF-ფაილს

ქმნის. $image არგუმენტს imagecreate () ფუნქცია აბრუნებს.

გამოსახულების ფორმატი იქნება GIF87a, თუ imagecolortransparent () (გამოსახულების ფერს განსაზღვრავს, როგორც გამჭირვალეს) ფუნქციის საშუალებით გამოსახულება არ გახდა გამჭირვალე – მაშინ ფორმატი იქნება GIF89a.

$filename არგუმენტი აუცილებელი არ არის. თუ ის მითითებულია ფუნქცია გამოსახულებას მოცემულ ფაილში აგზავნის, თუ არა, მაშინ ბრაუზერში გამოჰყავს.

ფუნქცია imagepng ()

ამ ფუნქციის საშუალებითაც დამუშავებული გამოსახულება

ინახება. imagepng () ფუნქციის სინტაქსია:

imagepng (resource $image [, string $filename])

imagepng () ფუნქციას გამოსახულების ($image)  GD-ნაკადი PNG ფორმატით სტანდარტულად ბრაუზერში გამოჰყავს ან, თუ $filename არგუმენტით ფაილის სახელია მოცემული, ფაილში. ფუნქცია imagejpeg ()

imagejpeg () ფუნქციას გამოსახულება ბრაუზერში ან ფაილში

გამოჰყავს. მისი სინტაქსია:

imagejpeg (resource $image [, string $filename [, int $quality]])

imagejpeg () ფუნქცია $image გამოსახულებიდან JPEG-ფაილს ქმნის.

$filename არგუმენტი აუცილებელი არ არის. იმ შემთხვევაში, თუ $quality არგუმენტის მითითება აუცილებელია, მაშინ ცარიელი სტრიქონი (”) უნდა გამოვიყენოთ.

შენიშვნა: JPEG ფორმატის მხარდაჭერა მხოლოდ იმ

შემთხვევაშია შესაძლებელი, თუ PHP-ს კომპილირება GD-

1.8-სთან      ან         უფრო ახალ    ვერსიასთან     ერთად განხორციელდა.
$quality არგუმენტი აუცილებელი არ არის და მისი მნიშვნელობის დიაპაზონი 0-დან (ყველაზე ცუდი ხარისხი, ყველაზე მცირე მოცულობის ფაილი) 100-მდეა (საუკეთესო ხარისხი, ყველაზე დიდი მოცულობის ფაილი). ჩუმათობის პრინციპით IJG quality (დაახლოებით 75) მნიშვნელობა გამოიყენება.

მაგრამ ერთი პატარა პრობლემა არსებობს – ბრაუზერს უნდა მივუთითოთ, რომ მოცემული გამოსახულება დაამუშაოს, როგორც სურათი და არა, როგორც ჩვეულებრივი ტექსტი.

სათაურის გასაგზავნად, header () ფუნქცია გამოიყენება.

სათაურის შინაარსი ასე გამოიყურება (დოკუმენტის ტიპი: სურათი/ფორმატი). მაგალითად,

header(“Content-type: image/gif”); header(“Content-type: image/png”); ფუნქცია imagedestroy () ეს ფუნქცია ასუფთავებს მეხსიერებას. მისი ფორმატია:
imagedestroy (resource $image)

imagedestroy () ფუნქცია $image გამოსახულებას არ შლის, მაგრამ, მასთან ასოცირებულ მეხსიერებას ათავისუფლებს. $image არის გამოსახულების იდენტიფიკატორი. ეს ფუნქცია განსაკუთრებით მაშინ გამოდგება, როდესაც დიდი რეზოლუციის მქონე ან პარალელურად რამდენიმე გამოსახულებასთან გვიწევს მუშაობა, ამასთან, თავისუფალი მეხსიერების დასაშვებ საზღვრებს არ უნდა გავცდეთ.

აქვე უნდა აღინიშნოს, რომ სკრიპტისათვის გამოყოფილი

მეხსიერება შესრულების შემდეგ ავტომატურად თავისუფლდება.

ფუნქცია getimagesize ()

ამ ფუნქციის საშუალებით გამოსახულების ზომის მიღებაა

შესაძლებელი. მისი ფორმატია:

getimagesize ( string $filename [, array &$imageinfo ] )

getimagesize () ფუნქცია მოცემული გამოსახულების ზომას განსაზღვრავს და ფაილის ტიპთან და height/width ტექსტურ სტრიქონთან ერთად დააბრუნებს მის ზომას, რომელიც შემდეგ HTML-ის IMG ტეგში შეიძლება იყოს გამოყენებული, ასევე HTTP შიგთავსის შესაბამის ტიპს დააბრუნებს.

ამის გარდა, getimagesize () ფუნქციას შეუძლია $imageinfo არგუმენტის საშუალებით გამოსახულების შესახებ დამატებითი ინფორმაცია მოგვაწოდოს.

$imageinfo ეს არააუცილებელი არგუმენტია, რომელიც საშუალებას იძლევა ზოგიერთი გაფართოებული მონაცემი გამოსახულების ფაილიდან ამოიღოს. დღესდღეობით, სხვადასხვა JPG APP მარკერი ასოცირებული მასივის სახით შეიძლება მივიღოთ. ზოგიერთი პროგრამა ამ მარკერებს სურათზე ტექსტის განსათავსებლად იყენებს.

getimagesize () ფუნქცია $imageinfo არგუმენტის მითითების

შემთხვევაში შვიდელემენტიან მასივს აბრუნებს.  მასივის ელემენტებში ინდექსით 0 და 1 მოცემულია

გამოსახულების სიგრძისა და სიმაღლის მნიშვნელობები.

შენიშვნა: ფაილის ზოგიერთი ფორმატი შეიძლება რამდენიმე სურათს ინახავდეს ან გამოსახულებას საერთოდ არ შეიცავდეს. ამ შემთხვევაში getimagesize () ფუნქცია გამოსახულების ზომების დადგენას ვერ შეძლებს. ამიტომ, getimagesize () ფუნქცია სურათის სიგრძისა და სიმაღლის მნიშვნელობად ნულებს დააბრუნებს.
მასივის ელემენტი ინდექსით 2 გამოსახულების ტიპის ერთ-

ერთ კონსტანტას IMAGETYPE_XXX შეიცავს; მასივის ელემენტით ინდექსით 3 მოცემულია ინფორმაცია სტრიქონს გამოსახულების სიგრძისა და სიმაღლის შესახებ შემდეგი მნიშვნელობით height=”yyy” width=”xxx”, რომელიც შემდეგ შეიძლება IMG ტეგში იყოს გამოყენებული.

შემდეგი ელემენტი არის mime – რომელიც გამოსახულების MIME-ტიპს შეესაბამება. ეს ცნობები Content-type სათაურის საფუძველზე გამოსახულების კორექტული დამუშავებისათვის გამოიყენება. ქვემოთა მოყვანილია getimagesize () ფუნქციისა და MIME-ტიპის გამოყენების მაგალითი:

<?php

$size = getimagesize($filename); $fp = fopen($filename, “rb”); if ($size && $fp) {
header(“Content-type: {$size[‘mime’]}”);     fpassthru($fp);     exit;

} else {

    // შეცდომაა

}

?>
შემდეგი ელემენტია channels, რომელიც RGB სურათისათვის 3-ის ტოლ, ხოლო CMYK სურათისათვის 4-ის ტოლ მნიშვნელობას იღებს.

და ბოლოს, ელემენტი bits, ეს არის ფერის სიღრმე – ბიტების

რაოდენობა თითოეული ფერისათვის.

ზოგიერთი ტიპის გამოსახულებისათვის channels და bits პარამეტრების მნიშვნელობის არსებობა შეიძლება გაუგებარი იყოს. მაგალითად, GIF-ი პიქსელზე ყოველთვის 3 არხს იყენებს, მაგრამ ფერთა საერთო ცხრილიდან ანიმაციური GIF გამოსახულებისათვის ფერთა სიღრმის გამოთვლა შეუძლებელია.

შენიშვნა: ყურადღება მიაქციეთ იმ ფაქტს, რომ JPC და JP2 გამოსახულებების ცალკეულ ნაწილებს შეიძლება ფერთა სხვადასხვა სიღრმე ჰქონდეს. ამ შემთხვევაში bits პარამეტრში ყველა აღმოჩენილ მნიშვნელობას შორის მაქსიმალური მნიშვნელობა იქნება გამოტანილი. ასევე, JP2 ფაილები შეიძლება რამდენიმე JPEG 2000 კოდურ ნაკადს შეიცავდეს. ამ შემთხვევაში, ფუნქციის მიერ ფაილში პირველად აღმოჩენილი ასეთი ნაკადის მნიშვნელობას გამოიტანს.
ფუნქციის შეცდომის შემთხვევაში გამოიტანს მნიშვნელობას FALSE.

კომენტარი

This site uses Akismet to reduce spam. Learn how your comment data is processed.