GD kütüphanesini kullanarak grafik oluşturma. PHP'de grafik çizme Neyi değiştirdik

Web senaryolarında grafik araçlarının kullanımlarını tanımlamak için aşağıdaki olası grafik kullanım senaryolarını göz önünde bulundurun:

  • Bağımsız olarak oluşturulan veya bir yerden ödünç alınan statik görüntüler bir HTML sayfasına yerleştirilebilir.
  • Programlı olarak oluşturulan görseller (HTML + CSS) kullanılabilir.
  • Bir betiğin yürütülmesi sırasında ortaya çıkabilecek tüm olası durumlar için statik grafikleri önceden oluşturmak, bunları dosyalara kaydetmek ve koşullu olarak görüntülemek için gd kitaplığını kullanabilirsiniz.

Basitliği nedeniyle statik görüntüler kullanarak grafik ekleme seçeneğini dikkate almayacağız, bu yüzden önce basit bir seçeneği (HTML + CSS grafikleri) ele alacağız, ardından PHP'de gd kütüphanesini kullanmayı düşüneceğiz.

Grafik HTML + CSS

Web sitesi ziyaretçileri, özellikle anket sonuçlarını göstermek için sıklıkla kullanılan, kenarları renkli yatay çubuk grafiklere aşinadır. İlk bakışta, bu tür diyagramları oluşturmak için bir tür grafiksel araç kullanılıyormuş gibi görünebilir, ancak gerçekte birkaç basit komut dosyasının kullanılması yeterlidir:

PHP, HTML, CSS'de grafiklerle çalışma /* Tasarımı oluşturan CSS stilleri */ body div ( height: 1em; display: inline-block; Vertical-align: middle ) span ( display: inline-block; width: 120px ) .turuncu ( arka plan: turuncu ) .elma ( arka plan: #33CC66 ) .muz ( arka plan: sarı ) .domates ( arka plan: kırmızı ) .salatalık ( arka plan: yeşil ) .patates ( arka plan: gri ) Sipariş formu Meyveler Portakallar Elmalar Muz Sebzeler Domates Salatalık Patates

Bu örnek PHP'nin herhangi bir yeni özelliğini göstermez, sadece HTML ve CSS kullanarak grafik oluşturmanın basit bir yolunu gösterir (bu durumda çubuk grafikler):

gd kütüphanesi

Önceki bölümde açıklanan grafik araçları, pratik olarak standart HTML kodunun yeteneklerini tüketir (gerçi oldukça güçlü HTML5 Canvas grafik oluşturma aracını kapsamadığımızı belirtmekte fayda var). Şimdi gd kütüphanesini kullanarak gerçekten rastgele grafikler oluşturmaya yönelik yöntemleri açıklamaya geçelim.

Gd kütüphanesinin genel açıklaması

Genel olarak konuşursak, gd araç seti, görüntüleri oluşturmak ve değiştirmek için kullanılan bir C kodu kütüphanesidir. Bu kütüphane ilk olarak Boutell.com'un yetenekli ve cömert çalışanları tarafından geliştirilmiş ve halkın kullanımına sunulmuştur.

Gd kütüphanesinin kendisi bir grafik veya çizim programı olmadığı gibi bağımsız bir uygulama veya grafik kullanıcı arayüzü de oluşturmaz. Bunun yerine gd kütüphanesi, istenen görüntü manipülasyonunu gerçekleştirmek için herhangi bir program tarafından çağrılabilecek işlevler sağlar. Bu, gd kütüphanesinin, bu kütüphanenin kodunun kullanılması gereken herhangi bir C programına bağlanabileceği anlamına gelir. Bu tam olarak PHP sisteminin geliştiricilerinin çözdüğü sorundur.

Aslında, bu amaç için bir PHP betiğinden gd prosedürlerini çağırmayı kolaylaştıran bir dizi arayüz işlevi yazılmıştır. Ancak gd kütüphanesinin kendisi PHP'ye özgü herhangi bir kod içermez ve kütüphaneye Perl, Pascal, Haskell ve REXX dahil olmak üzere diğer birçok programlama dilinden ve programlama ortamından erişilebilmesini sağlayacak arayüzler geliştirilmiştir.

gd kütüphanesi, kaynak görüntüler oluşturmak (başlangıçta boş, boş bir sayfaya benzer) için işlevleri çağırmanıza, bu kaynak görüntüler içinde çeşitli şekillerde çizim ve boyama yapmanıza ve sonuçta görüntüyü gd'nin dahili görüntü formatından standart bir görüntü formatına dönüştürmenize olanak tanır. görüntü formatına dönüştürün ve ardından onu son hedefe gönderin (tarayıcı penceresinde çıktı alın veya bir dosyaya veya veritabanına kaydedin). Ve tüm bu işlemler programın kontrolü altında gerçekleştirildiği ve manuel olarak gerçekleştirilmediği için, oluşturulan görüntüler istenildiği kadar karmaşık hale gelebilir ve programın yürütülmesi sırasında bağımlı hale getirilmesi istenen herhangi bir duruma bağlı olabilir.

Resim formatları

gd kütüphanesi temel olarak çok çeşitli formatları kullanarak görüntüleri içe ve dışa aktarmanıza olanak tanır. En popüler görüntü formatları GIF, JPEG ve PNG'dir, ancak kullanılan örneklerde öncelikle ikincisi kullanılmaktadır.

GIF ve PNG formatları, bazı eklemelerle birlikte piksellere karşılık gelen renkli öğelerden oluşan bir ızgarayı tanımlamayı amaçlamaktadır. İlk ekleme, hücrelerin gerçek renk numaralarını veya indekslerini bir renk numaraları tablosunda içerebilmesidir. (İlk seçenek, istediğiniz sayıda farklı renk sağlamanıza izin verdiği için daha etkileyici görüntüler oluşturmanıza olanak tanır, son seçenek ise daha kompakt görüntüler oluşturmanıza yardımcı olur.)

İkinci ekleme ise şu şekilde. Elbette GIF ve PNG formatlarının kavramsal gösterimi oldukça basittir ancak pratikte bu formatlardaki görüntülerin okunması, yazılması ve iletilmesi her zaman sıkıştırılmış biçimde yapılır. Sıkıştırma gereklidir çünkü hücre ızgarası olarak temsil edilen verilerin depolanması büyük miktarda bellek gerektirir. 500x400 piksellik basit bir görüntü 200.000 piksel içerir ve her piksel üç bayt gerektiriyorsa, gereken bellek miktarı zaten yarım megabaytın üzerindedir.

Sıkıştırma konusu geniş ve karmaşık bir konudur ancak çoğu sıkıştırma algoritması, boyutunu küçültmek için görüntü fazlalığını azaltmaya dayanır. (Örneğin, bir görüntüdeki her pikselin yeşil olduğunu belirtmek, her piksel için yeşil değerini ayrı ayrı belirlemekten daha az bellek alanı gerektirir.) Ne yazık ki, sıkıştırma algoritmaları bu özelliklerin kullanımına güvenmez çünkü bu tür kararları vermeleri gerekir. GIF formatında görüntüler oluşturmak için kullanılan sıkıştırma algoritmasında uygulanan bu sorunları çözme yöntemlerinin patenti bile alınmıştır.

Kitaplığı yükleme

Açıkçası gd kütüphanesini kurma ve PHP sistemiyle birlikte başarılı bir şekilde çalışmasını sağlama görevi oldukça karmaşıktır. Bunun nedeni PHP veya gd yazılımındaki herhangi bir eksiklik değildir, tamamen yapılandırma sorunlarından kaynaklanmaktadır; özellikle gd kütüphanelerinin nerede olması gerektiğini ve gerçekte nerede olduğunu anlamanız ve tüm yürütülebilir dosyaların derleme ve bağlantı kurma adımlarının doğru bir şekilde tamamlandığından emin olmanız gerekir. Bu nedenle mümkün olan en iyi durum, kullanıcının gd kütüphanesinin zaten kurulu olduğunu ve PHP sisteminde gd desteğinin zaten etkin olduğunu keşfetmesidir (web barındırma şirketinin izniyle veya kurulu PHP sistemine dahil olduğu için).

Bu nedenle, gd kütüphanesinin kurulumu, bu kütüphanenin önceden kurulu olup olmadığını kontrol ederek sıfır adımdan başlamalıdır. İlk olarak, aşağıdaki kodu komut dosyası dosyanıza girin ve komut dosyalarınızın web barındırma şirketiniz tarafından mı yoksa tamamen kendi kurulumunuz tarafından mı çalıştırıldığına bakılmaksızın tarayıcınızda çalıştırmanın sonuçlarını görüntüleyin:

Bu sayfayı ekranda görüntüledikten sonra tarayıcı penceresinde "gd" metin dizesini aramanız yeterlidir. Bu, PHP kurulumunuzun gd kütüphanesini desteklemeye ne ölçüde izin verdiğini açıklayan bir alt bölümü ortaya çıkarmalıdır. Yalnızca belirli türde görüntüler (örneğin, PNG) hazırlamayı düşünüyorsanız ve phpinfo() işlevinin sonuçları, bu tür görüntü için desteğin etkin olduğunu gösteriyorsa hemen başlayabilirsiniz. Ve gd sürüm bilgisi "bundled" kelimesini içeriyorsa PHP ile birlikte gelen gd kütüphanesi kullanılır.

Gd kütüphanesinden bahsetme girişimi başarısızlıkla sonuçlanırsa ve PHP'yi kendiniz kuruyorsanız, gd kütüphanesi yapılandırmasını yükleyebilir ve yapılandırabilirsiniz. (Öte yandan, eğer PHP kurulumunuz barındırma şirketiniz tarafından gerçekleştiriliyorsa, tek seçeneğiniz o şirketten gd kütüphanesi için destek sağlamasını istemek veya başka bir web barındırma şirketi kullanmaktır.)

PHP ile birlikte gelen gd kütüphanesini kullanmak, gd kurulumuyla ilgili zorlukların çoğunu ortadan kaldırır, ancak hepsini ortadan kaldırmaz. Gerçek şu ki, dağıtım kitinde yer alan sürümün kendisini kullanmak, gd kitaplığını almanıza olanak sağlar, ancak gd'nin çalışması için gerekli tüm kitaplıkların olması şart değildir. Gd kütüphanesinin kendisi başka kütüphanelere de bağlıdır: libpng (PNG resimlerini işlemek için), zlib (sıkıştırma için) ve jpeg-6b veya üzeri (gerekirse JPEG resimlerini işlemek için). Bu kütüphaneler birçok Linux kurulumunda zaten mevcuttur, bu durumda kurulum dizinini belirtmeden seçeneklere gereken with seçeneğinin (-with-zlib gibi) dahil edilmesi yeterli olabilir. PHP yapılandırmasını kendiniz yaparsanız, gd'nin dahil edilen sürümünün yürütülebilir dosyaya dahil edildiğinden emin olmak için --with-gd seçeneğini ekleyebilirsiniz. Farklı bir sürüme işaret etmek istiyorsanız bunun yerine --with-gd=path seçeneğini kullanın.

Bir veya daha fazla gerekli kitaplığın eksik olduğunu fark ederseniz bu, bu kitaplıkların ayrı olarak oluşturulması gerektiği anlamına gelir. Güncel sürümlerin nerede bulunabileceğine dair bilgi edinmek için www.libgd.org adresinde yer alan belgeleri inceleyerek başlayabilirsiniz.

Gd kütüphanesiyle çalışmanın temel ilkeleri

Bir görüntü gd araç seti kullanılarak oluşturulduğunda veya değiştirildiğinde, görüntü herhangi bir geleneksel görüntü tipine karşılık gelmeyen özel bir gd formatında temsil edilir. Görüntüleri bu gd formatında dışa aktarmak teorik olarak mümkündür, ancak ortaya çıkan görüntü sıkıştırılmadığından ve bir tarayıcıda veya basit grafik programında görüntülenemediğinden böyle bir işlem nadiren kullanılır.

Gd araç seti kullanılarak işlenen bir görüntü, sayısı genişlik ve yüksekliğin çarpımına eşit olan tüm piksellerin genişliği, yüksekliği ve rengi hakkındaki bilgilerle karakterize edilir. Tipik olarak, bir program gd kitaplığıyla etkileşimine ya yeni bir boş görüntü oluşturarak (üzerine çizim yapılacak ve çizilecek) ya da bir dosyadan bir görüntü aktararak başlar. Genellikle aşağıdaki adımlar gerçekleştirilir: birincisi, görüntüdeki renklerin dağıtımı, ikincisi, başka bazı işlemler kullanılarak görüntünün çizilmesi ve boyanması veya değiştirilmesi, üçüncüsü, görüntünün genel olarak kabul edilen bir formata dönüştürülmesi (örneğin, PNG veya JPEG) ve gideceği yere aktarın.

Renklerin temsili

Gd görüntülerde renkleri temsil etmenin iki yolu vardır: 256 renkle sınırlı olan palet tabanlı gösterim ve rastgele sayıda farklı RBG renk numarası belirtmenize olanak tanıyan gerçek renk gösterimi. Gd 1.x'te tek seçenek palet tabanlı renkler kullanmaktı, ancak gd 2.x'te ve bu kütüphanenin PHP'ye dahil olan sürümünde hem palet tabanlı görseller hem de gerçekçi renklerde görseller oluşturmak mümkün. Akılda tutulması gereken bir nokta, herhangi bir gd görüntüsünün ya palet tabanlı olması ya da gerçeğe yakın renklere (RGB) sahip olması gerektiğidir; bu, bir palete dayalı görüntülere gerçekçi renkler ekleme seçeneğinin olmadığı anlamına gelir.

Palete dayalı orijinal boş görüntüyü elde etmek için ImageCreate() işlevini çağırmanız ve görüntüyü gerçek renklerde elde etmek için ImageCreateTrueColor() işlevini kullanmanız gerekir.

Palet tabanlı görüntüler

Renkler, 0'dan 255'e kadar üç sayı kullanılarak Kırmızı-Yeşil-Mavi (RGB) formatında belirtilir. Örneğin, (255, 0, 0) sayılarıyla belirtilen renk parlak kırmızı, renk ( 0, 255, 0) - yeşil, renkli (0, 0, 255) - mavi, renkli (0, 0, 0) - siyah, renkli (255, 255, 255) - beyaz ve renkli (127, 127, 127) - gri. Giderek daha fazla yeni renk oluşturarak, üç renk bileşeninin değerlerini keyfi olarak seçebilirsiniz.

Bir görsel üzerine yapılan çizimlerin belirli bir renk ile yapılması ve renklerin kullanılmadan önce görsel içerisinde dağıtılması gerekmektedir. Ayrıca görüntüde dağıtılan ilk renk otomatik olarak arka plan rengi olur. Bu nedenle, hiçbir durumda renkleri belirtmeden yapabileceğinizi düşünmemelisiniz ve genellikle renkleri dağıtma işlemi, yeni bir boş görüntü oluşturduktan sonraki ilk işlemdir.

Palet tabanlı görüntülerdeki renkler, parametre olarak bir görüntüyü (daha önce oluşturulmuş) ve kırmızı, yeşil ve mavinin oranını belirten üç tam sayıyı alan imagecolorallocate() işlevi kullanılarak oluşturulur. Dönüş değeri, görüntünün dahili paletindeki yeni rengin indeksini belirten bir tamsayıdır. Belirtilen indeks değerinin bu rengi kullanarak gelecekteki tüm işlemleri gerçekleştirmek için gerekli olması nedeniyle, bu dönüş değerinin bir değişkene atanması gerekir.

Palet tabanlı görüntülerde maksimum 256 renk sayısı bulunabilir. (Okuyucu bu tür görüntülerin gerçekte neye dayandığıyla ilgilenebilir veya ilgilenmeyebilir, ancak palet tabanlı bir görüntüdeki her piksel aslında dizini saklayan tek bir bayttır. 256 renk paletindeki bir öğeden oluşur.)

Bir görüntüdeki renklerden birini dağıtırken döndürülen indeksin yalnızca o görüntü için anlamlı olduğunu unutmayın. Örneğin, bir PHP betiği bir görüntüde dağıtılan bir renge $black atarsa, o zaman bu değişkeni başka bir görüntüyü işlemek için çağrılan bir çizim komutuna renk girdisi olarak kullanmanın bir anlamı yoktur.

Gerçekçi renklere sahip görseller

gd 2.0 ve üzeri aynı zamanda her pikselin isteğe bağlı bir RGB renk numarası sakladığı, palet tabanlı olmayan görüntüler oluşturma olanağı da sağlar. Gerçek renk olarak adlandırılan bu formatta olası renklerin sayısı son derece fazladır. Bu özellik yalnızca sanatsal ifadenin kapsamını sınırsız bir şekilde genişletmekle kalmaz, aynı zamanda gd araç kitini kullanarak belleğe yüklenen gerçekçi renklerle PNG ve JPEG görüntülerini aslına sadık bir şekilde yeniden üretmenize olanak tanır.

İlk görüntüyü oluşturmak için farklı bir işlevin kullanılması ve farklı renklerin seçilmesi konusunda herhangi bir kısıtlama olmaması dışında, gerçek renkli görüntülerle çalışma ilkeleri, palet tabanlı görüntülerle benzerdir.

Özellikle, yeni renkler oluşturmak ve daha sonra çizim komutlarında kullanmak üzere bir değişkene dönüş değeri atamak için ImageColorAllocate() yöntemini çağırabilirsiniz. Tek fark, dönüş değerinin paletteki öğenin indeksi değil, RGB renk numarası olmasıdır. Ayrıca, gerçekçi renklere sahip görüntülerde, ImageColorAllocate() işlevinin bir yan etkisi olarak oluşturulan arka plan rengi kavramı yoktur; Başlatma sonucunda tüm piksellere siyah (0, 0, 0) adı verilir.

Şeffaflık

gd 2.x sürümleri şeffaflık kavramını desteklemektedir. Bu, rengin ne kadar şeffaf olduğunu belirtmek için (kırmızı, yeşil ve mavi değerlere ek olarak) bir alfa kanalı kullanır. Bu, örneğin bir şeklin diğerinin üzerine bindirilmesine olanak tanır, böylece birinci şekil ikinci şeklin tamamen üzerine binmek yerine kısmen görünür kalır.

PHP'de, görüntülerle çalışmaya yönelik birçok işlevin adında "alfa" kelimesini içeren bir analog vardır; bu, bu işlevlerde rengin dört değerle (R, G, B, A) temsil edildiğini gösterir. Örneğin, imageColorAllocate() işlevi üç parametre alır ve ImageColorAllocateAlpha() işlevini çağırırken, 0 ile 127 arasında bir değere sahip dördüncü bir parametre belirtmeniz gerekir. Sıfır değeri, rengin tamamen opak olduğunu ve değerin tamamen opak olduğunu gösterir. 127 rengin tamamen opak olduğunu gösterir.

Koordinatlar ve çizim komutları

Gd araç kitini kullanarak bir görüntü oluşturduktan sonra, içinde çizim komutlarını belirlemenize olanak tanıyan bir koordinat sistemi dolaylı olarak oluşturulur. Bu sistemdeki sınırlayıcı koordinat değerleri, görüntünün genişliği ve yüksekliğinin belirtilen parametreleriyle belirlenir.

Bu sistemdeki koordinatların (0, 0) koordinatlarına karşılık gelen orijini, görüntünün sol üst köşesinde bulunur. X değerleri için pozitif yön soldan sağa, Y değerleri için ise yukarıdan aşağıya doğrudur. (Bilgisayar grafiği koordinat sistemlerinde orijinin bu konumu yaygındır, ancak analitik geometri üzerine çalışmış olanlar orijinin diyagramın sol alt köşesinde olmasına alışkın görünmektedir.)

Çizim komutlarının sayısı çok fazladır. Bu komutlar, çizgi parçaları, dikdörtgenler ve yaylar çizmeye yönelik komutların yanı sıra belirli piksel değerlerini ayarlamaya yönelik komutları içerir ancak bunlarla sınırlı değildir. Ancak tüm bu çizim ve çizim komutlarının nihai sonucunun piksel değerlerini ayarlamak olduğunu unutmayın. Piksel değerlerini değiştiren komutlar çalıştırıldıktan sonra bellekte hiçbir iz kalmaz (değiştirilen değerlerin kendisi dışında), dolayısıyla çizim ve çizim komutlarını geçersiz kılmanın veya farklı komutların sonuçlarını ayrı ayrı sunmanın bir yolu yoktur.

Belirtilen görüntünün dışına taşan çizim komutlarını engelleyecek hiçbir şey yoktur ancak bu tür çizimlerin gözle görülür bir etkisi yoktur. Örneğin, tüm koordinat değerleri negatifse görüntüde bir dikdörtgen görünmeyecektir.

Biçim dönüştürme

Tüm çizim ve görüntü işleme işlemleri, dahili gd formatında temsil edilen görüntü üzerinde gerçekleştirilir. Ve bu işlemler tamamlandıktan sonra, betik, bu görüntüyü gerekli grafik formatına dönüştürmek ve onu kullanıcının tarayıcı penceresine (veya bir dosyaya) çıkarmak için dönüştürme ve çıktı komutlarından birini (imagepng, imagetjpeg, vb.) çağırabilir.

Kaynakları serbest bırakma

Tamamlanan gd görüntüsünün dönüştürülmesinin sonucu kullanıcıya aktarıldıktan sonra dahili sürümle çalışmanın tamamlandığını düşünebiliriz. Bu, bu sürümün imha edilmesi gerektiği anlamına gelir. Bunu yapmanın doğru yolu, parametre olarak bir görüntüyle imagedestroy() işlevini çağırmaktır.

gd kütüphane fonksiyonları

Bu makalede PHP yorumlayıcısının gd arayüzünde sağlanan tüm fonksiyonları ayrı ayrı listeleyip açıklamayacağız. Bu bilgilere alışmak için php.net kılavuzunun “Görüntü İşleme ve Oluşturma” bölümünü kullanmanızı öneririz. Çoğu gd işlevi aşağıdaki tabloda gösterilen kategorilerden birine girer. Bu tabloda listelenen işlev adlarının, her kelimenin ilk harfinin okunmasını kolaylaştırmak için büyük harfle yazıldığına dikkat edin, ancak PHP işlev adları büyük/küçük harfe duyarlı olmadığından kod örneklerinde bu duruma her zaman uyulmaz:

Gd fonksiyonlarının sınıflandırılması Örnek Notu Yazın
Görüntü oluşturma işlevleri ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Yeni bir gd görüntüsü döndürün. ImageCreate() işlevi, parametre olarak görüntünün genişliğini ve yüksekliğini alır ve diğer işlevlerin parametreleri bir dosya yolu, URL veya yüklenmesi ve gd formatına dönüştürülmesi gereken önceden oluşturulmuş bir görüntüyü içeren bir dizedir.
Renk dağıtım işlemlerini gerçekleştiren işlevler ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() ImageColorAllocate() işlevi, bir görüntü tutamacını ve gerekli kırmızı, yeşil ve mavi değerlerini parametre olarak alır ve daha sonra çizim ve çizim işlemlerinde kullanılmak üzere bir renk numarası döndürür. ImageColorAllocateAlpha işlevi ek bir parametreyi kabul eder - şeffaflık katsayısı (0-127)
Renk eşleştirme işlemlerini gerçekleştiren işlevler ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Paletli görüntüde eşleşen rengin dizinini döndürün. Adlarında "En Yakın" kelimesini içeren işlevler, en yakın eşleşen rengi döndürür (eşleşme doğruluğu, RGB değer alanındaki noktalar arasındaki mesafe olarak ölçülür); "Tam" isimli işlevler, yalnızca arananla aynıysa renk numarasını döndürür, aksi halde -1 değerini döndürürler, "Alfa" adlı işlevler, dört değer kullanılarak belirlenen renkler üzerinde çalışır (ile şeffaf renkler)
Çizgi çizme işlevleri ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() Belirtilen şeklin düz bölümlerini veya eğrilerini çizmek için kullanılırlar. Tipik olarak bu fonksiyonların her birinin ilk parametresi görüntü, son parametresi renk ve ara parametreleri ise X ve Y koordinatlarıdır.
Çizgi çizme kalemi ayarları ImageSetStyle(), ImageSetThickness() Sonraki çizgi çizme komutları tarafından oluşturulan çizgilerin özelliklerini etkileyen ayarları değiştirin (bu işlevlerden bazıları yalnızca gd 2.0.1 veya sonraki sürümler için geçerlidir)
Çizim ve doldurma fonksiyonları ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Kural olarak, çizgi çizmeye yönelik karşılık gelen işlevlere benzerler, ancak yalnızca alanların dış hatlarını çizmeyi değil, aynı zamanda oluşturulan alanları renkle doldurmayı da sağlarlar. ImageFill() özel işlevi, belirtilen dolgu rengini kullanarak bir doldurma işlemi gerçekleştirir. Doldurma, belirtilen XY koordinatlarından başlayarak her yöne yapılır (bu özelliklerden bazıları gd 2.0.1 veya üstünü gerektirir)
Metinle çalışma işlevleri ImageString(), ImageLoadFont() ImageString işlevi parametre olarak bir görüntü tanıtıcısını, yazı tipi numarasını, X ve Y koordinatlarını, bir metin dizesini ve bir rengi alır. Yazı tipi numarası 1 ile 5 arasındaysa çizgiyi bu renkte görüntülemek için yerleşik beş yazı tipinden biri kullanılır. Öte yandan, 5'ten büyük bir yazı tipi numarası, ImageLoadFont() işlevi kullanılarak özel bir yazı tipinin yüklenmesinin sonucunu gösterir.
Dışa aktarma işlevleri ImagePng(), ImageJpeg() Dahili gd görüntüsünü uygun formattaki bir görüntüye dönüştürün ve ardından bu görüntüyü çıkış akışına gönderin. Yalnızca bir parametre belirtilirse (görüntü tanıtıcısı), görüntü kullanıcıya yansıtılır ve dosya yolu olan ek bir parametre kullanılırsa, çıktı akışının hedefi dosya olur.
Görüntü imha işlevi ImageDestroy() Bir görüntü tanıtıcısını parametre olarak alır ve görüntüyle ilişkili tüm kaynakları serbest bırakır
HTTP görüntü desteği

Bir görselin kullanıcının tarayıcısında düzgün bir şekilde sunulabilmesi için görselin nereden gelmesi gerektiğinin ve formatının ne olduğunun belirtilmesi gerekmektedir. Bu nedenle, ne yazık ki, örneğin oluşturulan HTML dosyasında imageToPng() işlevine yapılan bir çağrıyı basit bir şekilde uygulamak ve böylece görüntünün görüntülenmesi sorununu çözmek mümkün değildir. Temel olarak, görüntü çıktı kodunu PHP betiğinde oluşturulan HTML koduyla değiştirmeniz gerekir ve bunun için aşağıda açıklanan üç seçenekten birini kullanabilirsiniz.

Tam Sayfa Görselleri Oluşturma

Oluşturulan sayfanın tamamı resim olarak biçimlendirilebilir. Bu durumda, görüntü verisinden önce bir HTTP başlığı iletmeniz ve böylece takip edenin belirli türde bir görüntü olduğunu bildirmeniz gerekir. Örneğin betiğin sonunda aşağıdaki satırlar bulunabilir:

// ... bir görüntü oluşturan ve onu // değişkenine atayan kod $image başlığı("Content-type: image/png"); // Başlığı tarayıcıda göster imagepng($image); // PNG formatına dönüştürülmüş görselin verilerini iletin imagedestroy($image); // Kaynakları serbest bırak

Bu yaklaşımın avantajı, POST parametreleri de dahil olmak üzere her türlü bilginin, gelecekteki görüntünün kompozisyonu hakkındaki talimatları iletmek için kullanılabilmesidir. Dezavantajı ise ortaya çıkan sayfanın herhangi bir normal HTML kodu içerememesidir. Aslında, komut dosyalarınızda başlık ve görselden önce herhangi bir metin çıktısı göndermemeye bile dikkat etmelisiniz, çünkü bu, içeriğin zamanından önce gönderilmesiyle eşdeğerdir. Bu durumda "Başlıklar zaten gönderildi..." hata mesajı görüntülenir.

Dosyalarda saklanan görüntüleri gömme

Her şeyden önce, HTML'nin tanımlayıcıyı desteklediğini unutmayın. aşağıdaki örnekte olduğu gibi, görüntü dosyası yolunu veya URL'sini belirterek bir görüntüyü yerleştirmenize olanak tanır:

Bu tasarım statik görüntü dosyaları için geçerlidir ancak yeni oluşturulan bir görüntünün yerleştirilmesini mümkün kılmaması için hiçbir neden yoktur. Bu nedenle, önce bir görüntünün oluşturulduğu, ardından görüntü verilerinin yerel bir dosyaya yazıldığı ve ardından ilgili tanımlayıcıyla birlikte HTML kodunun oluşturulduğu bir komut dosyası hazırlayabilirsiniz. , yeni oluşturulan dosyayı işaret ediyor.

Bu yaklaşımın tek dezavantajı, öncelikle sayfa oluşturma sürecinin, zaman alıcı olabilecek dosya yazma işlemlerini içermesi gerektiği ve ikinci olarak, dosyaları kullanmayı bitirdiğinizde onlarla ne yapacağınızı belirlemeniz gerektiğidir.

Ancak belirli bir durumda bu yaklaşım idealdir. Sınırlı sayıda seçeneği temsil eden görüntülerin oluşturulması ve önbelleğe alınmasıyla ilgilidir. Bu durumda, belirli bir durumu görüntü dosyasının adıyla ilişkilendirmenin belirli bir yolu vardır. Bir görüntünün çıktısını gerektiren bu durumlardan bazıları ortaya çıktığında, ilgili dosyanın zaten mevcut olup olmadığı kontrol edilir. Cevap olumluysa, bu dosyaya bir bağlantı basitçe uygulanır ve tanımlayıcı olarak biçimlendirilir. , eğer cevap hayırsa, bir resim oluşturulur, bir dosyaya yazılır ve ardından bu resme bir bağlantı tekrar uygulanır. Sonuçta yeni dosyalar oluşturmaya gerek kalmayacak.

Komut dosyalarında oluşturulan görüntüleri gömme

Son olarak, bağımsız bir resim komut dosyası sağlayamamanız ve daha sonra elde edilen görüntüyü, tanımlayıcıda belirterek başka bir komut dosyası tarafından oluşturulan dinamik bir sayfaya yerleştirmemeniz için hiçbir neden yoktur. Bu betiğin URL'si. Tek zorluk, gerekli verilerin bağımlı sayfaya nasıl aktarılacağını seçmektir. Örneğin, gömülü bir görüntüyü gösteren bir tanıtıcı şöyle görünebilir:

Bu durumda ballpage.php betiği, resimde çeşitli konumlarda bulunan renkli topların PNG görüntülerini döndürür.

Ancak bu yaklaşımın kullanılması sorunlara neden olabilir çünkü web sunucuları ve tarayıcılar bazen işlenmekte olan dosyaların son eklerini kontrol eder ve kontrolün sonuçlarını aldıklarında bunlara farklı tepki verirler. Örneğin, Apache sunucusunun, sunucu kodunun PHP kodu olarak yorumlanması gerektiğini belirleyebilmesi için, ballpage işleme betiğine bir .php uzantısı verilmesi gerekebilir (her ne kadar gerekli işlem modu yapılandırma dosyaları aracılığıyla da belirtilebilse de).

Ancak, aktarılan başlık bir görüntünün takip ettiğini belirtse bile, .php uzantılı bir dosyanın bir görüntü oluşturma olasılığını hesaba katmayan standart dışı tarayıcı sürümleri de vardır. Bu nedenle, bu yöntemi kullanırken, komut dosyalarını farklı tarayıcılarda test etmeniz ve amaçlanan kullanıcı çevresinin sayfaları istediğiniz biçimde alacağından emin olmanız gerekir.

Aşağıda görseller oluşturmak için gd kütüphanesinin kullanımına ilişkin örnekler verilmiştir.

Gd kütüphanesini kullanma örneği: basit şekiller oluşturma

Aşağıdaki örnekte basit geometrik şekiller içeren bir çizim oluşturmak için gd kütüphanesinin nasıl kullanılacağını göstereceğiz:

Ayarları kendi ayarlarınızla değiştirin ve bu dosyayı fcdemo klasöründeki connect-to-database.php adı altında kaydedin.

Rastgele veri ekleyelim

Bu gerçek bir proje olsaydı, kullanıcılar tablosu zamanla büyürdü, ancak gösteri amacıyla bazı veriler eklememiz gerekiyor. Tabloya rastgele veri ekleyecek küçük bir script yazalım. Aşağıdaki kodu anlamıyorsanız endişelenmeyin; bu eğitim için önemli değildir.

created-random-data.php adlı bu dosyayı aynı klasöre kaydedin.

Öncelikle veritabanı bağlantı dosyasını ekliyoruz. Daha sonra kullanıcı kaydı zamanının rastgele seçileceği bir zaman çerçevesi belirliyoruz. Eklenecek satır sayısını değiştirebilirsiniz. Bunu yapmak için $RecordsToInsert değişkenini ayarlamanız gerekir.

Daha sonra oluşturulan kayıtları veritabanına eklemek için scripti çalıştırıyoruz. Bu işlemi başlatmak için şu adrese gidin: http://localhost/fcdemo/generate-random-data.php.

Sonunda şu mesajı görmelisiniz: "Eklenen ($RecordsToInsert) kayıtlar"

Adım 2. Web sitesi iskeletini hazırlayın

Grafiğimizi görüntülemek için çok basit bir sayfa oluşturmamız gerekiyor. Bunun gibi bir şey:

FusionCharts v3.2 - LinkedCharts PHP Demosu