Internet Derazalar Android
Kengaytirmoq

PHP xususiyatlari rasmlar bilan ishlaydigan xususiyatlar. Tasvirni to'liq yuklash bo'yicha qo'llanma

Maqolada qanday qilib PHP - GDLIB kengaytmasi bilan qanday ishlashi kerak, bu sizga veb-sahifalardagi rasmlarni dinamik shakllantirish imkonini beradi.
Muallif - Nykoh (Niko)
Frantsuz tiliga tarjima - Anton Fedorchenko
Asl manzil - http://www.phpdebutant.org xrtusan111.php

Ushbu maqolani tushunish uchun PHP boshlang'ich asoslari haqida tasavvur qilish, shuningdek, rasmlar bilan ishlash kerak.

Tarjimon eslatmasi

misollarda barcha identifikator nomlari frantsuz tilida keltirilgan. Kodni o'quvchilarning tushunchasini engillashtirish uchun biz ularning tarjimasini taklif etamiz:
blan - oq
blu - ko'k
koululur - rang
couLur_fond - Orqa fon rangi
fichier - fayl
gris - kulrang
hauatur - balandlik
havayuturmage - rasm balandligi
kengligi - kenglik
kattalashtirish - rasm kengligi
mois - oy
noir - qora
politsiya - shrift boshetasi
rouge - qizil
stole - massiv
vert - yashil

Tarjimon eslatmasi

Odatiy bo'lib, 5 php 5-da barcha kengaytmalar o'chirilgan, shu jumladan dinamik tasvirlar - GD hosil bo'ladi. Ushbu kengayish uchun ko'rsatmalar uchun siz maqola bilan bog'lanishingiz kerak.

Maqsad: Dinamik tasvirni yaratish uchun mo'ljallangan GD kutubxonasining turli funktsiyalaridan foydalanishni o'rgatish.

GD kutubxonasi tasvirlar bilan ishlash uchun xususiyatlar to'plamidir. Unga rahmat, nafaqat o'z rasmlaringizni dinamik ravishda yaratishga, balki ular haqida turli xil ma'lumotlarni olish, o'lchamini o'zgartiring.

Diqqat: Ishni boshlashdan oldin siz nimanidir bilishingiz kerak. Gap shundaki, ushbu PHP kengaytmasining turli xil versiyalari mavjud bo'lib, xosting xizmat ko'rsatuvchi provayderlar ma'lum funktsiyalarni va hatto butun GD kutubxonasini o'chirib qo'yishi mumkin. Qanday maqsad bilan? Tasvirni qayta ishlash serverda katta yuk ekanligini ma'lum.

Shunday qilib, siz foydalanadigan xostingga o'rnatilgan GD kutubxonasining versiyasini, shuningdek ruxsat etilgan funktsiyalar haqida ma'lumot olishingiz kerak. Birinchi narsa qilish - bu fpinfo funktsiyasidan foydalanish. Quyidagi skriptni bajaring:

phpinfo.php.

phpinfo ();
?>

Agar siz shunga o'xshash stolingiz bo'lsa - hamma narsa yaxshi (ayniqsa kutubxona versiyasi 2.0 dan yangi bo'lsa)

GD.

GD qo'llab-quvvatlash

GD versiyasi.

Freetype qo'llab-quvvatlash

FRETYPYE BOSTAJASI.

JPG qo'llab-quvvatlash

PNG qo'llab-quvvatlash

WBMP qo'llab-quvvatlashi

Yuqorida aytib o'tilganidek, ba'zi imkoniyatlar o'chirilishi mumkin. Bunday holda, siz shunchaki bitta funktsiyani ishlatishga harakat qilishingiz kerak. Agar bu xatoga olib kelsa: Jiddiy xato: Haqoratsiz funktsiyaga qo'ng'iroq qiling, - bu funktsiya o'chirilganligiga shubha qilmaslik kerak.

I) tuval yaratish

Avval siz bo'sh tuvallarni yaratishingiz kerak. Ushbu maqolada biz faqat PNG yoki JPG formatidagi rasmlar haqida gapirib beramiz, degan xulosaga kelsak, GIF formati bizning e'tiborimizsiz qoladi. Haqiqat shundaki, ushbu format 1,3 versiyadan boshlanadigan GD kutubxonasi tomonidan qo'llab-quvvatlanmoqda, garchi GIF cheklangan qo'llab-quvvatlashi yana 2-versiyadan boshlandi.

Muhim eslatma

Www.phpDebutant.org saytidagi barcha o'quv kurslarida skriptlar jo'shqin html sahifalarni izchil yaratishga qaratilgan. Bu safar GD kutubxonasidan foydalangan holda, biz rasmlar yaratamiz, demak, siz aks-sado va bosma dizaynida unutishingiz kerak. Odatiy bo'lib, PHP skripti htmp-yadro yuborish shaklida aniqlashtirishni talab qilmaydigan HTML sahifasini yaratadi. Ammo agar biz rasm yaratsak, skriptning boshida siz uning turini ko'rsatishingiz kerak, masalan, mos keladigan sarlavhani yuborishingiz kerak, masalan, PNG uchun: sarlavhaga ega ("Tarkib turi: rasm / png");

Keyingi harakatlar grafik muharrir bilan biron bir narsani eslatadi. Siz yangi rasm yaratasiz, o'lchamlarni belgilab, fon rangini tanlang va uni kerakli formatda saqlang. Ushbu tadbirlar ketma-ketligi quyidagi skriptni ko'rsatadi:

iAPEVIDE.PP.

Sarlavha ("Tarkib turi: rasm / png");
$ iM \u003d Imagecrate (200, 100)
yoki o'lish ();
$ couLUR_fond \u003d xayoliy ($ im, 255, 0, 0);
Imagepng (im);
?>

Ushbu kichik skript qizil to'rtburchaklar (juda kamtarin, ammo yaxshi boshlang'ich). Mexanizmning tavsifi:

  • Imagecraticaticatication Funce kompaniyasi $ Chem tavsifchisini qaytaradi. $ Chek Imzentište dešmiptor barcha rasm chizish funktsiyalari bilan uzatilishi kerak. Tasavvur qilish funktsiyasi parametrlari yaratilgan rasmning uzunligi va kengligiga mos keladi (200x100).
  • Operatorning vazifasi yoki o'lishi - mumkin bo'lgan xatolarni ushlash.
  • Rangni tasvirlash funktsiyasi yordamida yaratilishi mumkin. U uchun ishlatiladi
    • keyingi foydalanish uchun o'zgaruvchan ranglarni yaratish va uni o'zgartiruvchi saqlab turish
    • $ Chas tasviri palitrasiga rang qo'shing

Uning parametrlari rangning qizil, yashil va ko'k tarkibiy qismlariga mos keladi va ushbu misolda biz qizil rangni yaratdik.

Muhim eslatma

ushbu rang fon rangiga mos keladi, chunki u birinchi bo'lib tasvirlar palitrasiga qo'shilgan.

Irab Aracevide.FP skriptini chaqirish (bo'sh_h .Php) PNG formatida rasm yaratadi. Uni veb-saytda ishlatish uchun siz "klassik" tasvirlar bilan shug'ullanishingiz kerak.

Juda oson! Siz hatto rasmni keltirib chiqaradigan ssenariy parametrlarini (masalan, fon rangini) o'tkazishingiz mumkin.

Shunday qilib, siz rasm chizishni boshlash uchun allaqachon ba'zi asosiy bilimlaringiz bor. Agar siz ularni chuqurlashtirishni xohlasangiz - bu erda qiziqarli xususiyatlar

  • Siz 32 bitli tasvirni yaratish uchun siz xayoliy tasvirni tasvirlab berishingiz mumkin (fotosuratlar uchun juda mos)
  • Siz ImageGPG funktsiyasini JPEG formatida rasm yaratish uchun almashtirishingiz mumkin (sarlavha funktsiyasi parametrini sarlavha parametrini o'zgartirishni unutmang ("Kontent turi
  • Quyida biz yaratilgan rasmni saqlab qolish mumkinligini ko'ramiz

Ii) rasm chizish funktsiyalari

Avval siz har qanday rasm koordinatalar tushunchasi bilan bog'liq, shuning uchun maqolaning ushbu kichik bir qismida biz ushbu masala bo'yicha ba'zi fikrlarni bildiramiz.
Rasmning yuqori chap burchagida koordinatalar (x \u003d 0, y \u003d 0) va pastki o'ngga (x \u003d rasm kengligi, y \u003d rasm balandligi) mavjud.

Masalan, 200 ta pikselda 100 ta rezolyutsiyaga ega bo'lgan rasm uchun koordinatalar quyidagi bo'ladi:

Rasm chizig'ining turli xil xususiyatlari uning koordinatsiyasining parametrlari sifatida olinadi. Ularni kerakli tartibda o'tkazing. Masalan, to'rtburchaklar chizish uchun tegishli funktsiyaning (Tistriger) ning ikkita nuqtai nazarini o'tkazish kerak. Birinchi nuqta koordinatalari rasmning yuqori chap burchagiga mos keladi, ikkinchi nuqtaning koordinatalari pastki o'ng burchakka mos keladi. Biror funktsiyalar noto'g'ri natijalarni berishlari mumkinligi sababli dalillarni chalkashtirib yubormang.


Bu erda turli xil shakllarni chizish uchun zarur bo'lgan funktsiyalarning ro'yxati, shuningdek, yaratilgan tasvirga matn qo'yish uchun.
Har bir funktsiya uchun siz sintaksis va manzilning qisqacha tavsifini topasiz.
Biz har bir funktsiya uchun foydalanishga misol olib kelishni maqsad qilmaymiz, bu erda siz faqat qisqacha tavsifni topasiz. Stol, shuningdek, qaysi biri yoki boshqa funktsiyani qo'llab-quvvatlanadigan kutubxonaning versiyasini belgilaydi. Ba'zi funktsiyalardan foydalanish misollarini rasmiy qo'llanma bo'limida topish mumkin

Sintaksis misoli

Tavsif

Bo'sh tuvani yaratadi (256 rang) $ imo $ katta va $ Ha Tuatyures kengligi. (PNG formatida afzal ko'rilgan)

Ushbu xususiyat tasvir ko'rinishiga o'xshash, ammo rasmning rangining chuqurligi 256 rang bilan cheklanmaydi. (JPEG format afzal ko'rilgan)

U o'zgaruvchan $ COL ORONA komponentlariga joylashadi, ularning $ $, $ 0 (1 dona). Tafsilotlar uchun birinchi qismga qarang.

Rasmdagi ellipsni markazda ($ x, $ y) yaratadi ($ x, $ y), $ l wide, $ h baland va $ col ranglari.

Bir xil xayol, lekin ellips $ kollej bilan to'ldirilgan

Coordinates ($ x, $ Y) va rangning pastki o'ng burchagi bilan bir nuqta va rangning pastki o'ng burchagi o'rtasida joylashgan $ col rangli to'rtburchaklar yaratadi

Ikki nuqta (x1, $ Y1) va ($ x2, $ Y2) bilan uzatadigan liniy rangni chizadi.

$ Implemalari $ Coordinaterlar $ ($ ballar) ro'yxatiga kiritilgan polgon ($ ballar \u003d $ soti va boshqalar \u003d $ x1 va boshqalar), $ raqam_points - soni Bir qatorda, $ col - rang.

Bir xil xayolot, lekin ellips $ kollej bilan to'ldirilgan

Rasm $ Men to'rtburchakni, yuqori chap burchagidek, koordinata ($ x0, $ y0) va pastki pastki ($ x1, $ Y1). $ COL - To'rtburchak rang

Bir xil tasavvurchi, ammo ellips $ kollej bilan to'ldirilgan

Ushbu funktsiyalar sizga statik chiziqlar uslubini o'zgartirish imkonini beradi. Qo'shimcha ma'lumot olish uchun rasmiy hujjatlarga qarang, ayniqsa imastrecbush funktsiyasi uchun ko'rsatganligi ko'rsatilgan, shuningdek, rasmlaretstika funktsiyasidan foydalanishga e'tibor bering.

Rasmda men koordinatalar (x, $ Y) va musoflak bilan bo'yalgan

Turli funktsiyalar tomonidan yaratilgan chiziqlarning qalinligini o'zgartiradi.

Rasmda $ i COLD $ COLD $ Politsiya ranglari ($ x, $ y) liniyani yaratadi ($ x, $ y) $ (0 dan 5 gacha)

Aniq tasvirlash, lekin satr vertikal ravishda ko'rsatiladi

Iii) misol birinchi bo'lib: Saytga tashrif buyurish statistikasi grafika shaklida

Amaliyotda olingan bilimlarni qo'llash - oddiy skript namunasini yarating. Ko'pincha saytga tashriflar statistikasini gistogramma shaklida taqdim etish kerak

Biz allaqachon tashrif buyuruvchilar uchun javobgar bo'lgan skriptning (ehtimol MySQL stolidan foydalanib) javobgar bo'lgan skriptning bir qismini ishlab chiqdingiz deb taxmin qilamiz. Biz bu erda amalga oshirish haqida gapirmaymiz, bu ushbu maqolaning maqsadi emas. Har oyda statistikaga tashrif buyuradigan statistikaga tashrif buyuradigan statistikaga tashrif buyurilgan. Ushbu maqolada biz qatorni "qo'lda" to'ldiramiz, lekin siz buni MySQL jadvalingiz ma'lumotlaridan foydalanib o'zingiz qila olasiz.

a) Tashrifing statistikasi: rasm va rang yaratish

Keling, 12 oy davomida saytlarga tashriflar statistikasini o'z ichiga olgan qatorni yaratishda boshlaymiz. Keyin biz 400x300 o'lchamdagi rasm yaratamiz va uchta rangni yaratamiz, ulardan biri fonning rangi bo'ladi.

tashrif buyuradi.php.

$ Tashriflar \u003d massiv (29, 254, 852, 820, 140, 140, 556, 663, 331, 407, 768);

Sarlavha ("Tarkib turi: rasm / png");
$ KireFimale \u003d 400;
$ havativage \u003d 300;
$ iM \u003d ImageCRate ($ katta, $ havasfera)
Yoki o'lish ( "Rasmni yaratishda xato");

$ noir \u003d haykalecoorall ($ im, 0, 0, 0);
$ elu \u003d xayoliy (im, 0, 0, 255);
?>

b) grafik o'qini chizish

Vaqtning gorizontal o'qini (oddiy qora chiziq), masalani 10 pikselda qoldirib, rasmning pastki qismiga joylashtiring.

Pastki qismida biz tsikl va tasvirlash funktsiyasidan foydalanib, 12 oyning raqamini imzolaymiz. Rasmning chap tomonida boshlanadigan har 30 pikselda joylashgan.

Va nihoyat, biz vertikal chiziqni, tartibga solishning tartib statistikasining o'qini o'tkazamiz.

// gorizontal chiziqni ushlab turing, xorissaning o'qi (vaqt)
ImeFel ($ im, 10, $ Havativemage-10, $ KiradorImage-10, $ Hautururmage-10, $ noir);
// 12 oy davomida ketma-ketlik sonini qaytarib oling
uchun ($ \u003d 1; $ iM, $ MoI, $ Mis * 30, $ Hautururmage-10, $ Mois, $
}

// Biz belgilangan tartibning o'qiga vertikal chiziqni (tashriflar sonini) bajaramiz
Imfel (IM, 10, 10, 10, $ 10, $ noir);
?>

c) tayoqlarni torting

Endi murakkab vazifa - chizish tayoqka o'ting.

Birinchidan, biz jadvalda taqdim etadigan tashrif buyuruvchilarning maksimal sonini aniqlashimiz kerak. Bu erda biz tasodifiy qiymatni tanladik, lekin aslida, siz mysql jadvalingiz ustunining maksimal qiymati uchun so'rovni amalga oshirishingiz kerak. Biz buni osonlashtiramiz ...

Har oy uchun yaratilgan to'rtburchaklarning balandligini hisoblash kerak. Buning uchun to'rtburchaklar (tayoqlar) balandligi uchun maksimal tashriflar butun rasmning balandligiga teng ekanligini bilib, tenglamani hal qilish kerak. Ma'lum bir oy tashriflarining soniga qarab, biz kerakli balandlikni olamiz

Uning chap chap burchakning koordinatalari koordinatalari koordinatalaridan boshlab har to'rtburchakni chizish va pastki o'ng tomonda tugash kerak.

Gistogrammani yaxshilash uchun bir oy davomida har bir to'rtburchaklar soniga tashriflar qo'shing.

// maksimal tashriflar
$ tashrifi \u003d 1000;

// tayoqni torting
uchun ($ \u003d 1; $ mois)<= 12 ; $mois ++) {
$ Havasurimalajecagggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg* ($. Mois - 1] * $ gativasmage) / $ ga tashrif buyuradi);
Igvidulyrificlect ($ im, $ * Mois * 30 - 7, $ HauteururAgge, $ Hauteurureaggere, $ Haua * 30 + 7, $ 10, $ Blu);
Izlash ($ im, 0, $ * MOI * 30 - 7, $ Hauteururiager - $ 10, $ 10, $ 10, $ 1);
}

// ana xolos
Imagepng (im);
?>

d) va bu erda natijasi!

Natijada, albatta, a'lo deb atash kerak, ammo biz oddiy kodning atigi 20 qatorini yozish orqali ko'proq yoki kamroq taqdim eta olmaganligimizni yodda tutish kerak.

12 oy davomida qatnashish bo'yicha gistogramma.


Iv) boshqa foydali xususiyatlar

Bu erda ranglar palitrasini boshqarish, shuningdek, turli xil tasvir ma'lumotlarini olish uchun mo'ljallangan foydali xususiyatlarning yana bir to'plami.

Tavsif

"Bu xususiyat $ Figarer faylining ismidan foydalanadi va 4 elementni o'z ichiga olgan qatorni qaytaradi: (1) $ Tabous rasmining kengligi (PX), (2) $ (3) $ (3) $ Stolue tasvir turi (SMS hujjatlari), (4) $ 4) "1024" "Balandligi \u003d" 768 ")" ")"

Im IM tasvir maydoni, $ kol rangi shaffof bo'ladi. Shaffoflikni saqlash uchun PNG formatidan foydalaning

To'rtburchaklar rasmni nusxalash $ SRC_IM RAHADIDA $ DST_IM. Nusxalash maydoni yuqori chap burchakning koordinatalari ($ src_x, $ src_y), $ srtc_l kengligi va $ srtc_h balandligi bilan cheklangan. Nusxalangan maydon koordinatalar bilan qabul qiluvchi rasmda paydo bo'ladi. ($ Dst_x, $ dst_y)

Bir xil xayol, bundan tashqari, funktsiya $ 1 dan 100 gacha qiymatlarni talab qiladigan $ intensist intensivligining tog 'jinslarining asta-sekin o'tishini amalga oshiradi.

Tasavvur qilish kabi ta'sirni amalga oshiradi va rasm hajmini o'zgartiradi. Quyidagi misolni ko'ring

Bir xil xayolotning o'xshashligi, ammo taraqqiyot natijasi kamroq qarordir, ammo funktsiya tezroq ishlaydi.

Resurs identifikatorini qaytaradi, $ iT jpeg $ fichier format faylidagi rasmni ko'rsatadi.

Resurs identifikatorini qaytaradi, $ i $ iT, Fichier PNG formatida joylashgan rasmni ko'rsatadi.

Rasmning kengligini qaytaradi

$ Imning balandligini qaytaradi

V) Masalan, miniatyuraning avlodlari (nusxa ko'chirish rasmlari)

Ushbu misol mavjud rasmning qisqartirilgan nusxasini yaratishga mo'ljallangan. Fotogalereyada fotogalereya yozishda siz ushbu xususiyatni miniatyura shaklida taqdim etadigan va mehmonlar kattalashtirish uchun sichqoncha bilan ularni bosishlari mumkin. Ushbu misolda biz ramka va ba'zi izohlar bilan jihozlangan miniatyura yaratamiz (o'lcham va tasvir nomi)

a) boshlanishi

Birinchi misoldan farqli o'laroq, ushbu skript tasvirni faylga yozadi va uni uchishmaydi. Shuning uchun HTTP sarlavhasini sarlavha () funktsiyasi yordamida yuborish kerakligi yo'qoladi. Shunday qilib, skript "klassik" bo'ladi va HTML-ni yaratishi mumkin.

Keling, 200x150 o'lchamlari bilan bo'sh tuvalarni yaratishda boshlaylik, keyin Imahcreatefrojpeg funktsiyasi yordamida mavjud rasmni (fayldan) ko'rib chiqing. Keyin bizda manba tasvirining o'lchamiga muhtoj bo'lishimiz mumkin, chunki biz imagesx va rasmlardan foydalanamiz.

miniatyura.php.

$ ficholik \u003d "Foto3.JPG";

$ KirdurdestReath \u003d 200;
$ Haughdestion \u003d 150;
$ im \u003d rasmecrreacecolor ($ eng ko'p narxli, yomon boylik)
Yoki o'lish ( "Rasmni yaratishda xato");

$ Manbe \u003d Imahcreatefromjpeg ($ fichik);

$ KRIGESSURSSE \u003d imagesx ($ manbali);
$ haanturserce \u003d rasmlar ($ manbali);
?>

b) ramka

Bir nechta ranglarni yaratgandan so'ng, ramkaga torting. Vazifani soddalashtirish uchun biz har xil kul rangdamiz.

Bir nechta ko'p rangli to'rtburchaklar chizilganda joylashgan shunga o'xshash ramkani yaratishning oddiy usuli bor. Biz qorong'u rangning eng katta to'rtburchagidan boshlaymiz (uning o'lchami rasmning o'lchamiga to'g'ri keladi). Keyin biz kattaroqroq to'rtburchakni o'rab olishimiz mumkin, uning rangi engilroq va hk.

Biz tomonidan yaratilgan freymning qalinligi 8 piksel.

$ blanc \u003d xayolparast (im, 255, 255, 255);
$ Gris [0] \u003d xayoliy im, 90, 90, 90);
$ Gris [1] \u003d Imaccoorall ($ im, 110, 110, 110);
$ Gris [2] \u003d Imaccoorall ($ im, 130, 130, 130);
$ Gris [3] \u003d Imaccoorall ($ im, 150, 150, 150);
$ Gris [4] \u003d Imaccoorall ($ im, 170, 170, 170);
$ Gris [5] \u003d Imaccoorall ($ im, 190, 190, 190);
$ Gris [6] \u003d Imaccoorall ($ im, 210, 210, 210);
$ Gris [7] \u003d Imaccoorall ($ im, 230, 230, 230);

Uchun ($ i \u003d 0; i $ i<= 7 ; $i ++) {
Imkoniyatli imtihon ($ im, $ i, $ i, $ Kirestarvest - $ i, $ i $ I, Gris [$ i]);
}
?>

c) miniatyurani yaratish

Eskizlarni yaratish uchun tasavvur tuzilgan xususiyati ishlatiladi. Bu bitta rasmni boshqasiga nusxalash uchun, nusxa ko'chirilgan maydon hajmini o'zgartirishi mumkin. Ushbu funktsiya qiymati aniq bo'lgan bir nechta parametrlarni oladi. Biz ularni tartibda ro'yxatlaymiz:

  • (IM) Rasm oluvchisi
  • ($ Manbali) Image manbai
  • Rasmga olingan qabul qiluvchining tasviri koordinatsiyasi.
  • Koordinata Y.
  • Coorcate X Manba i rasm rasmini (0 rasmni nusxalashni istagan bo'lsak)
  • Koordinata (y)
  • Manbali rasmga kiritilgan nusxaning kengligi ($ 25 AQSh dollari - (2 * 8) Qisqa va chapda masofadan turib) Qisqa va chapga nisbatan minusni minusning kengligi kengligidan iborat.
  • Nusxalash balandligi (biz kengligi kabi bir xil operatsiyalarni bajaramiz)
  • Nusxa ko'chirish manbasi tasviri maydoni
  • , $ Hautururser);
    Izlash ($ im, 0, 12, yomon ahvardiya - 18, "$ FixureSource x $ Xuatanturs") ", $ BAD);
    ?>

    d) natijani tejash.

    Natijada faqat faylni mini_ bilan boshlagan fayldagi faylni tejashimiz mumkin. Bu biz Rasmjpeg funktsiyasi bilan shug'ullanamiz.
    Ushbu xususiyat faqat bitta parametr mavjud bo'lganda, rasm foydalanuvchi brauzerida ko'rsatiladi. Ammo, agar fayl nomi ikkinchi parametr sifatida qabul qilingan bo'lsa, u brauzer bilan bo'lmaydi va rasm ko'rsatilgan faylda saqlanadi. Xuddi shu qoida bu funktsiya funktsiyasi uchun amal qiladi

    Mening rasmim namoyish etilmaydi, brauzer o'zini mavjud bo'lmagandek tutadi.
    Ehtimol, xatoni skriptingizda imzolash kerak. Sarlavha satridan sharh bering ("Qozog'iston:" Rasm / PNG: "Kontent turi:" Kontent turi: "Image / JPEG")), shuningdek, ImagePng satridan (EMMAGJPEG (IM) ) xato xabarini olish uchun))

    Skript uzoq davom etmoqda, bu normalmi?
    Agar siz "og'ir" funktsiyalardan foydalansangiz, ImaceCopyReRyPlePlePlePleadlangan bo'lsa, bu ajablanarli emas. PHP tarjimoni, xostingga o'rnatilgan va bu ishsiz etarli ...

    Mening rasmimning ranglari buzilgan (yoki u qora va oq kabi namoyon bo'ladi) nima uchun?
    Ehtimol, siz 256 rangdagi ranglar palitrasini cheklaydigan xayoliy xususiyatni ishlatgansiz. Ushbu cheklanishni engish uchun tasavvur o'rniga tasviriy funktsiyadan foydalaning.

    Ushbu maqolani tugatish, natijani ushbu moddaning ikkita misolini birlashtirish orqali olish mumkin bo'lgan natijani ko'rsatamiz. Bu erda, biz 2-misolda bo'lgani kabi bir xil usuldan foydalanib, biz gistogrammaga yarimtetka qo'shdik.

    Natija


Ushbu maqolada biz serverga rasmlarni uchinchi tomon tarkibiy qismlariga va tarmog'iga murojaat qilmasdan, serverga yuklash mexanizmini batafsil bayon qilamiz. Biz nafaqat mahalliy foydalanuvchining mashinasi, balki masofaviy fayllarni, shuningdek, masofadan turib yuklashni maslahat beramiz. Kodning barcha misollari, men kodni tezroq o'qish uchun va bir usuldan boshqasiga sakrab chiqmasligi uchun yozadigan barcha misollar. To'liq mualliflik huquqi va taqdimot akademik deb da'vo qilmaydi.

§Ise. Umumiy printsiplar

Serverga rasmni yuklashning butun ketma-ketligi quyidagicha ko'rsatilishi mumkin: php.ini sozlashfayl olishxavfsizlik tekshiruvima'lumotni tekshirishdiskda saqlanmoqda. Kompyuter kompyuteridan yoki URL-dan rasmni yuklash jarayoni boshqacha emas, rasmni olish va uni tejash usuli bundan mustasno. Serverdagi rasmning umumiy yuklash sxemasi quyidagicha:

URL manzilidagi rasmni tasdiqlash uchun biz giyamgizefromstring () funktsiyasidan foydalanamiz, chunki kıvrık uni qo'shimcha manipulyatsiya qilish uchun o'zgaruvchan yuklab olinadi.

Rasmlarni serverga yuklashda ularning aniq parametrlarini tekshirish yaxshi bo'lardi: kenglik, balandlik, bir tur Rasmlar, hajmi fayl baytda. Bu sizning arizangiz mantiqiga bog'liq, ammo ushbu qo'llanmadagi ravshanlik uchun biz yuqorida tavsiflangan barcha parametrlarni tekshiramiz.

§2. Xavfsizlik qoidalari

Rasmni yuklash xavfsizligi serverga begona kodni serverga va uning qatl etilishiga to'sqinlik qiladi. Amalda, PHP dasturlarida eng zaif joyni yaratish: shell yozuvi, ikkilik fayllardagi zararli kodi, exif ma'lumotlarini imzolash. Hacking usullarining oldini olish uchun siz quyidagi qoidalarga amal qilishingiz kerak:

lekin emas $ _filflardan olingan ishonch ma'lumotlari;
b. emas MIME turini gomeageage () funktsiyasidan tekshiring;
yuklab olinadigan faylda yangi nom va kengaytirishni hosil qiling;
g rasm jildidagi PHP skriptlarining bajarilishini taqiqlaydi;
d. emas Foydalanuvchi ma'lumotlarini talab qilish orqali joylashtiring va qo'shing;
e $ _Filens-dan foydalaning - Is_upload_file_file () va Minet_ULloaded_File ().

Agar "Xavfsizlik qoidalari" qo'shadigan biror narsa bo'lsa, unda ushbu qo'llanmaga sharhlar va ushbu qo'llanmaga sharhlar va men ularni ushbu paragrafda e'lon qilaman.

§3. Php.ini konfiguratsiyasi

PHP har qanday faylni yuklab olish jarayonida aniq konfiguratsiya qiymatlarini berishga imkon beradi. Buning uchun, bloklarni topish uchun php.ini faylida kerak " Resurs chegaralari.», « Ma'lumotlar bilan ishlash"Va" Fayl yuklangan."Keyin, agar kerak bo'lsa, quyidagi qiymatlarni tahrirlash:

; Bir necha soniya ichida skriptning maksimal bajarilishi vaqti Maks_Excection_Time \u003d 60. ; Bir skript bilan maksimal xotira iste'moli Memory_limit \u003d 64m. ; Post usuli bo'yicha yuborilgan maksimal miqdordagi ruxsat etilgan miqdor Post_max_SIZE \u003d 5M. ; Fayllarni yuklab olish uchun ruxsat Fayl_uploads \u003d yoqilgan. ; Yuklab olish paytida fayllarni saqlash uchun papka Upload_tmp_da \u003d uy / foydalanuvchi / temp ; Yuklangan faylning maksimal hajmi Upload_mx_fileeee \u003d 5m. ; Bir vaqtning o'zida yuklab olinadigan fayllarning maksimal soni Max_file_uploads \u003d 10.

Belgilangan qiymatlar asosida foydalanuvchi birdaniga o'ntadan ko'proq narsani yuklay olmaydi va har bir fayl 5 MB dan oshmasligi kerak. Blokdan parametrlar " Resurs chegaralari."Biz uzoq faylni yuklab olishimiz kerak, chunki jingalak, biz tarkibni o'zgaruvchiga yuklab olamiz va uni bizga kerak bo'lgan mezonlarga yuklab olamiz va buning uchun qo'shimcha vaqt va xotira kerak.

PHP.ini konfiguratsiya fayli har doim veb-dasturning biznes-huquqi mantig'iga muvofiq sozlash uchun kerak. Masalan, biz o'ndan ortiq faylni 5 MB hajmgacha yuklashni rejalashtirmoqdamiz, bu biz uchun ~ 50 MB xotira kerakligini anglatadi. Bundan tashqari, biz bitta faylning mahalliy mashinaning maksimal yuklash vaqti va Maks_Exhice_Time_Time-dagi skriptning etarli darajada bajarilish muddatini belgilash uchun biz uchun maksimal foydalanish vaqtini bilishimiz kerak.

§Four. Formadan rasmlarni yuklash

Endi biz bir nechta fayllarni yuklab olishni serverga yuklamaymiz va faqat bitta faylning namunasini faqat yuklab olish mexanikasini o'zi tahlil qilamiz. Shunday qilib, kompyuter kompyuteridan rasmni yuklash uchun siz post usuli yordamida PHP skript faylini yuborish uchun HTML shaklidan foydalanishingiz kerak va ma'lumotlar kodlash usulini ko'rsating enctyPe \u003d "Ko'praq / forma-ma'lumot" (Bunday holda, ma'lumotlar kodlangan va ushbu qiymat faqat ikkilik fayllarni yuborish uchun qo'llaniladi). Quyidagi shakl bilan biz bundan keyin ham ishlaymiz:

Faylni tanlash maydoni, biz nomdan foydalanamiz. ism \u003d "yuklash" HTML shaklida, garchi bu har qanday bo'lishi mumkin. Sutgloboll o'zgaruvchisidan foydalanib, php skript faylini yuborgandan so'ng, uni ushlash mumkin $ _Fils ["Upload"] Bir xil nom bilan massivda fayl ma'lumotlari mavjud:

Massiv ( \u003d\u003e Rasm.jpg. // asl fayl nomi \u003d\u003e image / JPEG // MIME fayl turi \u003d\u003e Uy \\ tem \\ tem \\ phpd07E.Tmp // ikkilik fayl \u003d\u003e 0 // xato kodi => 17170 // Fayl hajmi baytda)

Hamma ma'lumotlar emas $ _Files. Siz ishonishingiz mumkin: MIME turi va fayl hajmi soxta bo'lishi mumkin, chunki ular HTTP javobidan kelib chiqadi va to'liq har xil fayl yashirin bo'lishi mumkinligi sababli unga ishonib bo'lmaydi. Ammo, bundan tashqari, bizning faylimiz to'g'ri yuklanganligini va umuman yuklash-bo'lmasligini tekshirishimiz kerak. Buning uchun xatolarni tekshirish $ _Fils ["Yuklash"] ["Xato"] Va fayl funktsiyadan foydalangan holda post orqali yuklanganligiga ishonch hosil qiling is_uploaded_File (). Agar biror narsa rejada bo'lmasa, demak, biz ekranda xatoni olamiz.

// qulaylik uchun o'zgaruvchini yoqtirish $ fileath \u003d $ _fils ["Upload"] ["Tmp_name"]; $ eticcode \u003d $ _film ["Yuklash"] ["Xato"]; // xatolarni tekshiring Agar ($ xato jamg'i! \u003d\u003d Upload_Ek_ok ||! Is_Uploaded_File ($ FilPath)) ( // xato nomlari bilan massiv $ atormessages \u003d [upload_err_inie_size \u003d\u003e "Fayl hajmi PHP konfiguratsiyasida yangilanish_max_fileeize qiymatidan oshib ketdi.", Upload_REC_FORT_SIZE \u003d\u003e "Yuklab olingan fayl hajmi Max_File_SIZE_SIZE qiymatidan yuqori.", Upload_err_part \u003d\u003e "Yuklab olish fayli qisman olindi.", Upload_err_no_file \u003d\u003e "Fayl yuklanmagan.", Upload_RED_NO_TMP_DIR \u003d\u003e "Vaqtinchalik papka yo'q.", Upload_Er_cant_write \u003d\u003e "Diskga fayl yozib bo'lmadi.", Upload_rd_extenstency \u003d\u003e "PHP kengaytmasi faylni yuklab olishni to'xtatdi.", ]; // noma'lum xatoni o'rnating $ NouteMessage \u003d. "Faylni yuklab olishda noma'lum xato yuz berdi."; // Agar massivda xato kodi bo'lmasa, aytaylik, xato noma'lum $ ChiqishMessage \u003d Ismet ($ atmessiyalar [$ xato jamg'armasi)? $ Atmessages [$ etimcode]: $ Noma'lumMase; // xato nomini qaytarib oling O'lish ($ dasturlar); )

Hujumgarchilik uchun tasvirga o'rnatilgan zararli kodni yuklamadi, siz funktsiyalarga ishonolmaysiz getimalge ()bu MIME turini ham qaytaradi. Funktsiya birinchi dalilni to'g'ri tasvir fayliga havola qilishni kutadi. Siz "FilyFo kengaytmasi orqali haqiqiy MIME" turini aniqlay olasiz. Quyidagi kod kalit so'zning mavjudligini tekshiradi image. Bizning yuklab olinadigan fayl turida va agar u chiqmasa, u xato qiladi:

// Resurs faylini yarating $ fi \u003d Finfo_open (FilliinFo_Mime_type); // MIME turini olamiz $ \u003d (String) Finfo_File ($ FI, $ FilPath); );

Ushbu bosqichda, biz MIME turini tekshirib ko'rayotgan serverimizda har qanday rasmlarni yuklashimiz mumkin, ammo ba'zi xususiyatlarga rasmlarni yuklash uchun biz ularni funktsiyadan foydalanishimiz kerak getimalge ()bu ikkilik fayl bo'lishi mumkin $ _Fils ["Yuklash"] ["Tmp_name"]. Natijada, biz 7 elementdan iborat qatorni olamiz:

Massiv (\u003d\u003e 1280 // Kenglik \u003d\u003e 768 // balandligi \u003d\u003e 2 // tola \u003d\u003e kenglik \u003d "1280" balandligi \u003d "768" // atributlari HTML uchun \u003d\u003e 8 // rang chuqurligi => 3 // rang modeli \u003d\u003e image / JPEG // MIME - turi)

Rasmni yanada tekshirish va unga ishlash uchun biz faqat 3 qiymatni bilishimiz kerak: kenglik, balandlik va hajmi Fayl (o'lchamini hisoblash funktsiyasini hisoblash uchun fayllar () Vaqtinchalik papkadan ikkilik fayl uchun).

// natija funktsiyasi o'zgaruvchida yozing $ case \u003d gomeagize ($ FilPath); $ Likmbites \u003d 1024 * 1024 * 5; $ cheklovi \u003d 1280; $ liteitheight \u003d 768; // kerakli parametrlarni tekshiring Agar (fayllar)\u003e $ cimpbytes) o'lchailsa ( "Rasm hajmi 5 MB dan oshmasligi kerak."); agar ($ image\u003e $ raqami) o'lishi (); agar ($ rasm\u003e $ cheklov)) o'lish ();

Barcha cheklardan so'ng, bizning yuklab olinadigan faylimizni ba'zi rasmlar papkasiga o'tkazishga ishonch bilan erishamiz. Funktsiya orqali yaxshiroq bajaring ko'chirish_uploaded_file ()Xavfsiz rejimda ishlaydi. Faylni ko'chirishdan oldin siz unutolmaysiz rasm turidan tasodifiy ism va kengaytirishni yarating Bizning faylimiz uchun. Bu:

// MD5-XAH asosida yangi fayl nomini yarating $ Ismingiz \u003d MD5_File ($ FilPath); // Sotil .jpg .jpg oldin// Rasmni yangi nom va kengaytirishni papka / rasmlarga o'tkazish Agar (! FOYPAATT, __DRADED_FILE ($ filoth, __da__. »/ rasm. $ ismingiz) ( "Rasmni yozishda xatolik yuz berdi."); }

Bunga bu yakunlandi. Fayllarni yanada qulay yuklab olish uchun siz yuklatilganfile klassidan rimfuziatsiya paketidan, httpfiund paketidan foydalanishingiz mumkin $ _Files. shuningdek, faylni qayta saqlaydi ko'chirish_uploaded_file ().

§Five. Rasmni mos yozuvlar bilan yuklash

Tasvirni mos ravishda yuklab olish uchun, bizda masofadan resurslar bilan ishlaydigan jilmayish kutubxonasi kerak. U bilan biz tarkibni o'zgaruvchida yuklab olamiz. Bir tomondan, bu maqsadlar uchun shunday tuyulishi mumkin fayl_get_onronents ()Ammo aslida biz yuklab olinadigan ma'lumotlarning hajmini boshqara olmaymiz va odatda barcha xatolarni ko'rib chiqa olmaymiz. Kurl uchun kerakli ma'lumotlarni to'g'ri yuklab olish uchun quyidagilarni yuklab olishingiz kerak: kuzatishga ruxsat bering qayta yo'naltirishlarCheklarni yoqish guvohnomaGap maksimal vaqt Kulgl ishlaydi (yuklab olinadigan ma'lumotlar hajmi va resurs bilan o'rtacha tezlik tufayli shakllangan). Qanday qilib faylni quyida keltirilgan o'zgaruvchiga kerakli parametrlar bilan yuklab olish mumkin:

// qandaydir tarzda biz havolani olamiz $ url \u003d "https://site.ru/pikture.jpg"; // Http Http Link manziliga tekshiring if (! Prag_MTATCH ("/ ^ HTTPS ?: / i", $ url), $ url, filter_VRAT_URL))) ( "Masofaviy faylga to'g'ri havolani ko'rsating."); } // Sizning ma'lumotimiz bilan jilovni boshlang $ c \u003d curl_init ($ url); // Kurl uchun sozlamalarni ko'rsating Curl_etpt_array ($ ch, [ // Kurlning maksimal ish soatlarini ko'rsating Curlopt_ingizout \u003d\u003e 60, // qayta yo'naltirishlarga rioya qilishga ruxsat berish Curlopt_followcoation \u003d\u003e 1, // natija o'zgaruvchida yozishga imkon beradi Curlopt_returntransfer \u003d\u003e 1, // ma'lumotlar yuklanish ko'rsatkichiga yoqing Curlopt_noprogress \u003d\u003e 0, // buferning o'lchamini 1 Kb Curlopt_boferSize \u003d\u003e 1024, // yuklab olingan ma'lumotlarni hisoblash uchun xususiyat yozing // Batafsil: http://stackoverf.com/a/7642638 Curlopt_progressfunt \u003d\u003e Funktsiya ($ CH, $ CH, DWNLDESSEM, $ STLLDESIZE, $ ATLDED) ( // 5 MB dan ko'proq yuklab olinganda, kıvrırığıni buzadi Agar ($ DWNILD\u003e 1024 * 1024 * 5) (Qaytish - 1;)), // Sertifikatni tekshirish (standartda) Curlopt_ssl_verifepere \u003d\u003e 1, // Sertifikat nomini va uning tasodifini belgilangan xost bilan tekshiring (standartda) Curlopt_ssl_verififhost \u003d\u003e 2, // tekshirish sertifikatini ko'rsating // download: https://curl.haxx.se/docs/caexttrract.html Curlopt_cainfo \u003d\u003e __Dir__. "/Cacer.pem",]); $ XR \u003d Curl_exec ($ c); // ma'lumotlarni o'zgaruvchiga yuklab oling $ info \u003d curl_getinifo ($ ch); // biz operatsiya haqida ma'lumot olamiz $ xato \u003d Curl_Rerno ($ ch); // oxirgi xato kodini yozing // to'liq krujka seansi Curl_cloz ($ ch);

Agar hamma narsa muvaffaqiyatli o'tdi va kasaba 60 soniyada uchrashsa, unda havolani o'zgaruvchiga yuklab olinadi $ Xom.. Bundan tashqari, funktsiya curl_getinifo () Talab qilingan so'rov haqida ma'lumotni qaytarib berish uchun masofadan resurslar bilan ishlashni tahlil qilish uchun ko'proq ma'lumot olishingiz mumkin:

Massiv ( \u003d\u003e image / jpeg // Tarozi turidan mime turi => 200 // oxirgi HTTP kodi => 0 // qayta yo'naltirishlar soni => 0.656 // umumiy vaqt o'tishi => 0.188 // Xost bilan ulanish vaqti => 4504 // Ma'lumotlarning haqiqiy o'lchami => 4504 // Tarkib uzunligidan ma'lumot hajmi /* ... */ )

Keyinchalik xatolar yo'qligini tekshirishimiz kerak curl_Rerno () Va resurs 200 ga teng HTTP kodini beradi, aks holda biz bunday URL uchun topilmadi, deymiz. Axir, o'zgaruvchan tekshiruvdan so'ng $ Xom. BUNI B. getiMgeTing () Va biz rasmlarni shakldagi rasmlarni yuklashda, biz allaqachon chargizatsiyasida ishlaymiz.

Shuni esda tutingki, biz ma'lumot olish vaqtida fayl hajmini yutib olamiz, chunki biz Curl_GTTINFO () ga ishonamiz, chunki biz Cent_GTP_Code qiymatlari, yuklab olish_ctent_conent_Lonth_ontent_LELTength Contle-ning sarlavhalari asosida shakllanadi. Faylni to'liq yuklab oling, so'ngra ko'p vaqt va xotirani talab qiladigan baytlar sonini tekshiring. Shuning uchun biz CurLopt_ProgrogsFressufunktsiyasi variantidan foydalanib, olingan ma'lumotlarning hajmini boshqaramiz: Kurl bizning chegaramizdan ko'ra ko'proq ma'lumot olishi bilan, bu ishni to'xtatadi va curle_aborted_callbacke_ballback xatosiga ega bo'ladi.

// Kurl xatolarini va faylning mavjudligini tekshiring agar ($ xato \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Kurle_operation_timedout) "Kutivof chegarasi oshdi."); Agar ($ xato \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Kurle_aborted_by_Callback) o'lishi ( "O'lchov 5 MB dan oshmasligi kerak."); Agar ($ info ["http_code"]! \u003d\u003d 200) o'lishi ( "Fayl mavjud emas."); // Resurs faylini yarating $ fi \u003d Finfo_open (FilliinFo_Mime_type); // $ xom ashyolaridan foydalanib, MIME turini oling $ Mime \u003d (string) Finfo_buffer ($ FI, $ xom); // Resurs faylini yoping Finfo_cloz ($ FI); // Kalit so'z rasmini tekshiring (rasm / JPEG, Image / PNG va boshqalar) Agar (strPos ($ mime, "image") \u003d\u003d\u003d noto'g'ri) o'lish ( "Siz faqat rasmlarni yuklab olishingiz mumkin."); // rasm ma'lumotlarini uning tarkibidan oling. $ case \u003d gotsimalefromstring (xom a); // rasmlar uchun cheklovlarni belgilang $ cheklovi \u003d 1280; $ liteitheight \u003d 768; // kerakli parametrlarni tekshiring agar ($ image\u003e $ claiththeight) o'lishi ( "Rasmning balandligi 768 punktdan oshmasligi kerak."); Agar ($ rasm\u003e $ cheklov)) o'lgan ( "Tasvirning kengligi 1280 balldan oshmasligi kerak."); // MD5-Hash rasmidan yangi nomni yarating $ Ism \u003d md5 ($ xom); // Rasm turi asosida fayl kengaytmani ishlab chiqarish $ kengaytma \u003d i rasm_type_to_extistenziya ($ rasm); // Sotil .jpg .jpg oldin $ Formati \u003d str_replace ("JPEG", "JPG", $ uzatilganligi); // rasmni yangi nom va uzaytirish papka / rasmlarga uzating if (! Film_put_onronents (__Dir__. »/ rasmlar /". $ ism. $ Chase, $ xom)) ( "Rasmni saqlash paytida xatolik yuz berdi."); }

Siz saqlash uchun rasmdan foydalanishingiz mumkin fayl_put_contents ()bu tarkibni faylga yozadi. Yangi fayl nomi biz funktsiya orqali yaratamiz mD5 ()va uzaytirish quyidagicha bo'ladi image_type_to_stenzi (). Endi biz havolani havolada yuklashimiz mumkin.

§6. Bir nechta fayllarni tanlash

Ushbu bo'limda biz bir nechta rasmlarni mahalliy foydalanuvchilar mashinasidan va masofaviy havolalardan yuklab olish usullarini tahlil qilamiz. Biz havolalarni yuborish uchun biz haqimizdan foydalanamiz $ _Post. va bizga yorliq yordamida barcha ma'lumotlarni beraylik texareya.. Fayllarni formadan yuklab olish uchun biz ishlashda davom etamiz $ _Files.. Bizning yangi HTML shaklimiz eskisidan biroz farq qiladi.

Faylni tanlash maydonining oxirida ism \u003d "yuklash" Tanlangan qavslar va atribut qo'shildi bir nechtabu brauzerga bir nechta fayllarni tanlash imkonini beradi. Agar PHP.ini-da xatolar bo'lmasa, barcha fayllar vaqtincha papkada yana vaqtincha papkada yuklab olinadi. Siz ularni ushlab turishingiz mumkin $ _Files.Ammo bu safar abstreyda ma'lumotlarni qayta ishlash uchun noqulay tuzilishga ega bo'ladi. Ushbu vazifa kichik manipulyatsiyalar bilan bir qatorda hal qilinadi:

// $ _filfer tuzilishini o'zgartiring Foreweae ($ _fils ["yuklash"]. ) // eski tugmachalarni olib tashlang Pusiz ($ _fils ["yuklash"] [$ tugma]; ) // barcha rasmlarni tartibda yuklang Oldingi ($ _fils ["yuklash"] $ K \u003d\u003e $ V) ( // bitta faylni yuklash $ _Fils ["Yuklash"] [$ k] ["Tmp_name"]; $ _Fils ["Yuklash"] [$ k] ["Xato"]; )

URL-dagi bir nechta rasmlarni yuklab olish uchun, keling havolalarimizni orqali beraylik texareya. Nomi bilan ism \u003d "yuklash"ular bo'sh joy yoki yangi chiziqdan belgilanishi mumkin. Funktsiya preg_split. Tabiiy ofat Barcha ma'lumotlar $ _Post ["yuklash"] Va u tsiklda yurishingiz kerak bo'lgan qatorni hosil qiladi va har bir yaroqli URL manziliga yuboriladi.

$ Ma'lumot \u003d Preg_split ("/ \\ S + /", $ _post ["Upgload"], - 1, preg_spitt_empty); Oldingi ($ url uchun $ ma'lumot) ( // URL-dagi rasmni tekshirish va yuklash }

Bo'sh rasm yaratish.

Sintaksis:

Int Inacecrate (int X, int))

Bo'sh rasm o'lchamini yaratadi x. ustida y. Nuqta va identifikatorini qaytaradi. Rasm yaratilgandan so'ng, u bilan ishlash ushbu identifikator orqali, uning tavsifi orqali qanday ishlashimiz bilan amalga oshiriladi.

Misol:

Bilan yangi rasm yaratish GD. va uni brauzer ekraniga olib chiqish:

imahcreatefrompng.

PNG faylidan rasm yaratish.

Sintaksis:

ST inhececreatefrng (string fayl nomi)

Ushbu funktsiya PNG faylidan rasmlarni xotiraga yuklang va uni identifikatorga qaytaradi. Qo'ng'iroqdan keyin imageFreat ()

Misol:

Grafik faylni ochishda xatolikni topish misoli.

Funktsiyasi ($ imgname) ($ imgnameeefrng ($ imgname); / * 'if-ni ochishga urinish (/ * im) * Bo'sh taqqos * / $ bgc \u003d Imaccoorall ($ im, 255, 255, 255); $ TC \u003d 0, 0, 0, 150, 30, $ Bgc); / * chiqishi Mismsg * /, 1, 5, 5, "Imgname $ COLDED YO'Q";) $ im;

imahcreatefromjpeg.

JPEG faylidan rasm yaratish.

Sintaksis:

Int IngeCreathomjpeg (Strice Fayl nomi)

imageFreat ()Bundan tashqari, rasm bilan ishlash faqat ushbu identifikator orqali mumkin. Diskdan yuklanganda, rasmni o'rab olinadi va ochilmagan formatda saqlanadi, shunda siz u bilan o'lchash, chizish liniyalari va boshqalar kabi turli xil operatsiyalarni amalga oshirishingiz uchun.

imageeatefomMIF

GIF faylidan chizilgan rasm yaratish.

Sintaksis:

Int ImahcreatefomMIF (string fayl nomi)

Ushbu xususiyat fayldan xotirani xotiraga yuklash va uning identifikatorini qaytarish uchun yuklash. Qo'ng'iroqdan keyin imageFreat ()Bundan tashqari, rasm bilan ishlash faqat ushbu identifikator orqali mumkin. Diskdan yuklanganda, rasmni o'rab olinadi va ochilmagan formatda saqlanadi, shunda siz u bilan o'lchash, chizish liniyalari va boshqalar kabi turli xil operatsiyalarni amalga oshirishingiz uchun.

Shuni ta'kidlash kerak GD. 1.6-versiyadan boshlab GIF formatini qo'llab-quvvatlamaydi. Shu munosabat bilan ushbu funktsiya deyarli ishlatilmaydi.

imagepng.

Funktsiya PNG formatidagi rasmni har qanday brauzer yoki faylga ko'rsatadi.

Sintaksis:

Im Imgepng (IM [, State Filen nomi])

Ushbu xususiyat uning identifikatori va xotirada ko'rsatilgan rasmni diskka va uni brauzerga olib boradi.

imageFreat () im..

Agar argument bo'lsa fayl nomi. Tarkib turi. Sarlavha ().

Sarlavha ("Tarkib turi: rasm / png") PNG uchun.

Misol: Funktsiyani ishlatishning misoli imagepng ():

Alpha-kanalli manba tasvirini saqlash uchun funktsiyadan foydalaning iageavealfa ():

rasmjpeg.

Rasm jpeg brauzerini siqib chiqaring yoki faylda saqlang.

Sintaksis:

ST IIHTJPEG (IM IM [, State Filen nomi [, SHT sifati])]

Ushbu xususiyat uning identifikatori va xotirada ko'rsatilgan rasmni diskda saqlaydi yoki uni brauzerga ko'rsatadi.

Albatta, dastlab rasmni ishlatish yoki yaratilishi kerak. imageFreat (). Biz uning identifikatori bilan tanishishimiz kerak im..

Agar argument bo'lsa fayl nomi. O'tkazib yuborilgan, keyin tegishli formatda siqilgan ma'lumotlar to'g'ridan-to'g'ri standart chiqish oqimiga, I.E. Brauzerda. Kerakli sarlavha Tarkib turi. Ko'rsatilmagan, buning ko'rinishi, uni qo'lda ishlatishingiz kerak Sarlavha ().

Aslida, rasm turiga qarab uchta buyruqdan birini chaqirishingiz kerak:

Sarlavha ("Tarkib turi: Rasm / JPEG") JPEG uchun

Uchinchi ixtiyoriy parametr sifat. Rasm sifatini (0 dan 100 gacha) o'rnatadi.

image2wbmp

Rasmni brauzer yoki faylga ko'rsatish.

Sintaksis:

SH IIHT2WMMP (resurs rasmi [, string Fayl nomi [, IN TereShall])]

Funktsiya tavsifda ko'rsatilgan rasmni aks ettiradi image., brauzerda yoki ismini ixtiyoriy parametr bilan belgilagan faylga fayl nomi..

Agar rasm brauzerda ko'rsatiladigan bo'lsa, WBMP turini Image / VND.WAP.WMMP xususiyatini ko'rsatishingiz kerak Sarlavha ():

Funktsiya rasm2wbmp () Mavjud PHP. Agar kutubxona versiyasi bo'lsa GD. 1.8 yoki undan past.

xayol.

GIF brauzerining rasmini faylga yuborish yoki faylni saqlash.

Sintaksis:

CRASAGIF (IM [, State Filen nomi])

Funktsiya uning identifikatori va xotirada ko'rsatilgan rasmni diskda diskda saqlang yoki uni brauzerga chiqaring.

Albatta, dastlab rasmni ishlatish yoki yaratilishi kerak. imageFreat (). Biz uning identifikatori bilan tanishishimiz kerak im..

Agar argument bo'lsa fayl nomi. O'tkazib yuborilgan, keyin tegishli formatda siqilgan ma'lumotlar to'g'ridan-to'g'ri standart chiqish oqimiga, I.E. Brauzerda. Kerakli sarlavha Tarkib turi. Ko'rsatilmagan, buning ko'rinishi, uni qo'lda ishlatishingiz kerak Sarlavha ().

Aslida, rasm turiga qarab uchta buyruqdan birini chaqirishingiz kerak:

Sarlavha ("Tarkib turi: rasm / gif")

Chunki kutubxona GD.1.6-versiyadan boshlab GIF formatini qo'llab-quvvatlamaydi, bu funktsiya kamdan-kam foydalaniladi.

tasavvur qiling.

Naqshning bir qismini nusxalash.

Sintaksis:

Int IngeCopy (Int dst_IM, int SRC_IM, INT DST_Y, IR SRC_Y, IR SRC_W, IR SRC_H)

Funktsiya to'rtburchaklar maydonni nuqtai nazardan nusxalaydi ( src_x., sRC_Y.) Kengligi sRC_W. va bo'yi sRC_H. Rasmdan src_im chizishda dst_im., nusxa ko'chirilgan ofset hududini taqdim etish ( dst_x., dst_y.).

Quyidagi misol rasm bo'ladi film1.png. B tomonidan nusxa ko'chirilgan film2.png.

xayolot

Bir qismni tarash bilan nusxalash.

Sintaksis:

In TasvireCopyRes (Int dst src_im, int dtis, int dtis, int SRCX, IR DSTW, IR SRCW, SRCHW

Ushbu xususiyat eng kuchli va universaldir. Uni ishlatish, siz rasmlarni (yoki ularning bo'limlarini) nusxalashingiz, ularni ko'chirish yoki ajratishingiz mumkin.

dst_im. Funktsiya natijasi ko'rsatilgan rasm identifikatorini belgilaydi. Ushbu rasm allaqachon yaratilishi yoki yuklangan bo'lishi kerak va tegishli o'lchamlarga ega bo'lishi kerak.

src_im - ish olib boriladigan rasm identifikatori. Biroq, SRC_IM va DST_IMMOGUT va bir-biriga to'g'ri keladi.

Parametrlar srcx., srf., sRCW., srtoch Yuqoridagi manbali rasmdagi maydonni mos ravishda bajarilishini mos ravishda, yuqori chap burchakning koordinatalari, kengligi va bo'yining koordinatalari belgilab beradi.

Va nihoyat, to'rt kishi dstx, dty., dstw., ds Rasmdagi joyni belgilaydi dst_im.oldingi to'rtda ko'rsatilgan to'rtburchaklar "siqilgan" bo'ladi. E'tibor bering, agar ikki to'rtburchakning kengligi yoki balandligi bir-biriga to'g'ri kelmasa, rasm avtomatik ravishda cho'zish yoki siqish uchun mo'ljallangan bo'ladi.

Quyidagi misolda film1.jpg. ikki marta kamayadi va faylga yozadi film2.jp.g:

madhidestroy

Halokat namunasi.

Sintaksis:

ST IMGagroy (IM im)

Funktsiya tavsifchorni yo'q qiladi im. Ilgari yaratilgan naqsh (faylni yopish kabi) fcite () Ochilishdan keyin fopen ()).

Agar siz AID PHP ishlab chiqaruvchisisiz, ehtimol siz nafaqat GD kutubxona grafikasi kutubxonasi haqida eshitasiz. Bu bilan tanish bo'lmaganlar uchun GD kutubxonasini tushuntirib berishingizni, ularni ko'p harakatsiz rasmlar yaratishga, o'zgartirish va boshqarish imkonini beradi. Bugun biz AAA PHP-kutubxonasida foydalanish bilan tanishamiz.

Eng avvalo

GD kutubxonangiz o'rnatilganligiga ishonch hosil qiling va sizning serveringizda faollashadi. Buni qanday qilishni bilmayapsizmi? Xavotir olmang, hamma narsa oddiy! Serverdagi PHP faylini yaratishingiz kerak, so'ngra quyidagilarni kiriting:

Endi brauzer sahifasini oching va siz PHP versiyangizning juda katta ro'yxatini ko'rasiz. Bir oz pastga siljiting, "GD" bo'limini toping va kutubxona ulanganligiga ishonch hosil qiling. Agar yo'q bo'lsa, xosting xizmatini xostingda kompaniya bilan bog'laning. Yaxshiyamki, men allaqachon ishlashga va ishlashga muvaffaq bo'ldim, GD kutubxonasi o'rnatilgan va ulangan.

Diqqatga sazovor voqealar

Keling, ba'zi katta daqiqalarni boshlaylik. Birinchidan, biz buni brauzer tomonidan beriladigan barcha xatolar haqidagi xabarlar beramiz. Bunga PHP kodining boshida quyidagilarni kiritish orqali erishish mumkin:

Xato_report (e_all);
?>

Kvadratni chizing

Keling, ko'k kvadrat - hech narsa g'ayritabiiy emas, balki asos bilan shug'ullanish kerak. Siz xohlagan maydonni olish uchun quyidagi harakatlarni bajarishingiz kerak:

Kontent turini "Image" sifatida o'rnating, shunda brauzer rasmni to'g'ri talqin qilishi mumkin;
. Kerakli kenglikni va balandlikni belgilab, yangi bo'sh rasm yarating;
. Rangli fonni ko'k rangga aylantiring;
. Yakuniy rasm tanlovini saqlang va uni brauzerga o'tkazing;
. Rasmni yaratish va saqlash uchun ishlatiladigan toza xotira;
. Indeks.php faylidan rasm displeyini tashkil qiling

Endi biz harakatlar tartibida qaror qildik, siz kodlashni boshlashingiz mumkin. Men kodning har bir qatoriga va kodlash jarayonida ishlatiladigan funktsiyalar haqida izoh berishga harakat qildim, keyin men keyinroq gaplashaman. Shunday qilib, bizning ko'k maydonimizni yaratish kodi. Yozgandan so'ng, biz uni "asosiy_Square.php" nomi ostida saqlaymiz.

// xato xabarlarini ko'rsatishni o'rnating
ini_set ("displey_rrors", "1");
Xato_report (e_all);


// tasvir o'lchamlarini aniqlang
// 125px kengligi, 125px balandligi
$ case \u003d Imah Jecoue (125, 125);

// fon rangini tanlang
$ ko'k \u003d haykalecoorallastik ($ rasm, 0, 0, 255);

// boshqa rangni belgilang - shunchaki naqsh paydo bo'lganda, fon rangni belgilash ()
// Eslatma - maydon qizil emas, balki maydon ko'k rangda bo'ladi.
$ qizil \u003d tasviriy reaktiv ($ rasm, 255, 0, 0);

// faylni PNG formatida saqlang va uni namoyish eting.
insapng ($ rasm);

// ishlatiladigan xotirani tozalang
Imgestestroy ($ rasm);
?>

Endi nima qilayotganimizni yaxshiroq tushunish uchun yuqoridagi kodning barcha funktsiyalarini va har bir bosqichni ko'rib chiqaylik:

Men allaqachon tushuntirganimda, agar kerak bo'lsa, ularni tuzatish uchun xato xabari variantini qo'shamiz
. Keyin biz tarkib turini - PNG-ni belgilash uchun sarlavha () funktsiyasidan foydalanamiz
. Biz rasmni saqlab, kerakli kenglikni va balandlikni o'rnatamiz - bu tafsilotlarni ko'rib chiqing.
. Keyin rasmimiz fonida ko'k rangni tanlash uchun tasviriy rang funktsiyasidan foydalaning. Shuni esda tutingki, oxirgi versiyada birinchi rangda o'rnatilgan ranglar bo'ladi, shuning uchun bizning maydonimiz ko'k rangga aylanmaydi.
. Rasmni oxirgi saqlash uchun biz tasavvurni () ishlatishamiz. Agar siz biron bir katalogda rasmni saqlamoqchi bo'lsangiz, qo'shimcha parametrlarni kiritishingiz kerak.
. Va nihoyat, biz Xotiradan ImeGestroy funktsiyasi yordamida tozalaymiz ()

Biz Mo maydoniga ko'k_square.php faylini ochib, bizdan asosiy sahifada havolani qo'ysak, u yanada yaxshi bo'ladi:

Agar hamma narsa to'g'ri bajarilgan bo'lsa, siz ushbu ko'k maydonni ko'rasiz:

Salom Dunyo

Endi, qanday qilib tasvirlarni yaratishni bilib olganimizda, tanlangan shriftimiz tomonidan yozilgan matn bilan rasm yaratishga harakat qilaylik. Biz har qanday shriftdan truetpe shriftidan (.TFF) katalogidan foydalanishimiz mumkin. Keyingi misollarda men "Adventist" shriftidan foydalanaman. Keling, qorong'i kulrang maydonda "Salom Dunyo" yozamiz. Diqqat, kodga qarang, so'ngra har bir bosqichni batafsil ajrating.

ini_set ("displey_rrors", "1");
Xato_report (e_all);


Sarlavha ("Tarkib turi: rasm / png");

// rasm hajmini aniqlang - 300x300 piksel

// Orqa fonni o'rnating

// shriftga yo'lni ko'rsating
$ font_path \u003d "Advents_ight";

// biz matn yozamiz
$ string \u003d "Salom Dunyo!";

// matn va rasmlarni ulang
TheTettFTekk ($ rasm, 50, 0, 10, 160, $ wit, $ font_path, $ string);

// rasmni saqlang
insapng ($ rasm);

// xotirani tozalang
Imgestestroy ($ rasm);
?>

Kodni "Salom_world.php" faylida saqlang, biz uni yuqorida sanab o'tilganidek ochamiz. Xo'sh, bu erda nima yangilik?

Biz rasm hajmini 300 * 300 pikselni o'rnatdik va quyuq kulrang fondan foydalangan
. Shrift nomidan foydalanishni qanday ko'rsatganimizga e'tibor bering: haqiqat shundaki, kodda biz matnni rasmga murojaat qilishimiz kerak. Shuningdek, shriftning nomi kengaytirmasdan yozilganligini unutmang. Biroq, bu GD kutubxonasining PHP-ning qaysi versiyasiga bog'liq: agar shrift nomi "/" bilan boshlanmasa, "/" bilan boshlanmasa, agar siz bizning nomimizdan oldin turmasangiz, ttf kerak bo'ladi Shrift, u avtomatik ravishda TTF ga qo'shiladi.
. Keyin biz "Salom Dunyo!" Qo'shimcha foydalanish uchun matnni saqlash
. Ushbu Kodetda ishlatiladigan eng muhim funktsiya - bu parametrlarni talab qiladigan tasvirni, rasm hajmiga, x o'q, harf, rang, shrift, matnga (ushbu tartibda)

Kodni saqlang, uni biron bir tarzda oching va siz ushbu rasmni ko'rasiz:

Uni aylantiring!

Matnni va rasmni burchak ostida ulash uchun siz biron bir burchakda joylashganligi haqida tasavvur qilishingiz mumkinligini payqadingiz. Kodni qayta yozamiz va maydonni maydonga aylantiramiz.

// xato xabarlarini o'rnating
ini_set ("displey_rrors", "1");
Xato_report (e_all);

// tarkib turini o'rnating
Sarlavha ("Tarkib turi: rasm / png");

// rasm hajmini aniqlang: 300x300 piksel
$ case \u003d Imah Jecoatie (300, 300);

// fon rangining rangini aniqlang - quyuq kulrang
$ Quyon_grey \u003d Imaccoorall ($ rasm, 102, 102, 102);
$ white \u003d xayoliy ($ rasm, 255, 255, 255);

// shriftga yo'lni ko'rsating
$ font_path \u003d "Advents_ight";

// biz matn yozamiz
$ string \u003d "Salom Dunyo!";

// matn va rasmlarni ulang
TheHTettFatt ($ rasm, 50, 30, 30, 70, $ wit, $ font_path, $ string);

// rasmni saqlang
insapng ($ rasm);

// xotirani tozalang
Imgestestroy ($ rasm);
?>

E'tibor bering, biz 0 daraja (oldingi misolda) o'rniga -45 daraja qiymatini (avvalgi misolda) belgilaymiz - bu matnni burish uchun talab qilinadi. Rasmga qarang.

Qanday? Qiziqmi? Emasmi? Keyin ko'proq amaliy ish qilishga harakat qilaylik.

Bugungi raqam nima?

Biz nafaqat o'zingizni suratga tushirishimiz mumkin, balki tayyorgarlikdan ham foydalanishimiz mumkin! Bir oz kodlash va bizda joriy sana (oy, kun va yilni) ko'rsatadigan taqvim bo'ladi. Biz Google-da kalendar ish qismini qidirmoqdamiz, biz formatdagi rasmni topamiz - men uning hajmini o'zgartirdim va PNG formatiga tarjima qildim. Ish qismiga qarang:

Endi bizda asos bor va biz uni GD va PHP funktsiyalaridan foydalanib qayta ishlashimiz mumkin. Men dunyoning eng buyuk dizaynerining sarlavhasi deb o'ylayman - ehtimol boshqa ish materiallari va boshqa shrift saytda yaxshiroq ko'rinishga ega. Shunday qilib, dizayn sizniki, lekin hozir uchun kodni ko'rib chiqamiz:

// xato xabarlarini o'rnating
ini_set ("displey_rrors", "1");
Xato_report (e_all);

// tarkib turini o'rnating

// sanani saqlang
Ro'yxat ($ oy, $ kun, yil) \u003d portlash ("/", sana ("F / JS / Y")));

// fon rasmini yuklab oling
$ rasm \u003d Imahcreatefrompng ("Calendar_blank.png");
$ case_width \u003d imagesx ($ rasm);

// fon rangini va shriftini aniqlang
$ white \u003d xayoliy ($ rasm, 255, 255, 255);
$ black \u003d xayol, tasvir, 0, 0, 0, 0);
$ font_path \u003d "Advents_ight";

// matnning pozitsiyasini belgilang
$ Pos_mont \u003d icetTfbbox (13, 0, $ Font_path, $ oy);
$ Pos_day \u003d icetTFBbox (25, 0, $ Font_path, $ kun);
$ Pos_year \u003d icetTfbbox (8, 0, $ Font_path, yil);

// oyiga yozaman
TheHTettxt ($ rasm, 13, 0, ($ rasm_width - $ pos_month) / 2, 40, $ oq, $ Font_path, $ oy);

// kun yozish
TheHTettxt ($ rasm, 25, 0, ($ cos_widh - $ POS_Dadh - $ 2, 80, $ BARD_PATATATH, $ kun);

// Biz yil yozamiz
TheTettFTekk ($ rasm, 8, 0, ($ rasm_width - $ POS_YEY) / $ 2, 100, $ qora, $ Font_Path, $ Yillar);

// rasmni saqlang
ImageJPEG ($ case, ', 100);

// xotirani tozalang
Imgestestroy ($ rasm);
?>

Xo'sh, bu erda nima qilyapmiz? Ro'yxat () funktsiyasi nima? Keling, buni aniqlaylik:

Har doimgidek, biz rasmning turini to'g'ri ko'rsatib qo'yamiz.
. 10-qatorda siz ro'yxat funktsiya xususiyatini ko'rasiz. Biz portlash () funktsiyasi yordamida sana formatini aniqlaymiz. Shunday qilib, har qanday ma'lumotni tartibga solishingiz mumkin. Endi biz hozirgi oy, kun va yil haqida ma'lumotga kirishimiz mumkin.
. Sankt formatini tashkil qilish uchun biz 22-24 sathda biz Funktsiyani tashkil qilamiz. Funktsiya belgilangan tartibda sana ekranini va o'ng pastki burchakka kirishni ta'minlaydi va biz $ pos_month yozamiz. Bularning barchasi, matnning o'lchamidan qat'iy nazar avtomatik ravishda to'g'ri joylashtirilgan bo'lishi uchun zarurdir.
. Keyin har bir satrni navbat bilan yaratamiz va X o'q davomida matn o'lchamini o'rnatamiz.

Agar hech qanday falokat yuz bermasa, sizga sana kompyuteringizga o'rnatilgan yagona farqli ko'rinishingiz kerak - mening rasmingiz, statik. Satpin saytiga rahmat skript bilan yordam uchun.

Mushuklar va rasm filtrlari

Bugun sizga o'rgatadigan oxirgi narsa, bu rasmlarning filtrlari - juda qiziq narsa, ishoning. ImeFilter () xususiyati tugagan rasmni oladi va uni ma'lum bir tarzda o'zgartiradi - masalan, u qora va oq rejimga tarjima qilinadi. Keling, biz asl shaklida ishlayotgan rasmga qaraylik.

Endi rasmlarni filtrlash funktsiyasidan foydalanib, mushuk qora va oq rangga aylantiraylik.

// xato xabarlarini o'rnating
ini_set ("displey_rrors", "1");
Xato_report (e_all);

// asl rasm o'rnatilganligini tekshiring
if (ismset ($ _ ["Manba"])))) (
// rasmni asosiy ishlov berishni amalga oshiring
$ rasm \u003d Filter_VAR ($ _ olish ["Manba"], Filtr_sanitize_string);

// rasmni yuklang
$ rasm \u003d Imahcreatefromjpeg ($ rasm);

// uni qora va oq rejimga tarjima qiling
Imahfilter ($ rasm, img_filter_grayscale);

// tarkib turini o'rnating
Sarlavha ("Tarkib turi: rasm / JPEG");

// rasmni 90% sifatida saqlang
Imagejpeg ($ rasm, », 90);

// xotirani tozalang
Imgestestroy ($ rasm);
}
?>

Yuqoridagi skript etarlicha moslashuvchan, shuning uchun siz osonlikcha qora va oq rangga ega bo'lishingiz mumkin - shunga o'xshash:

Biz har qanday rasmni "manba" ga joylashtirdik va tez orada u qora va oq rangga aylanadi. Ushbu xususiyatdan ommaviy mavjud bo'lgan serverlarda foydalanishni rejalashtirganlar qo'shimcha xavfsizlik choralarini talab qiladilar. Yuqoridagi skriptda bu turdagi turdir. JPEG, siz har qanday grafik fayllarni qayta ishlash uchun funktsiyani ishlatishingiz mumkin. Endi bizning mushukimiz shunday ko'rinadi:

Boshqa filtrlar:

Dars oxirida men sizni boshqa grafik filtrlar va ulardan foydalanish natijalari bilan tanishtiraman.

Yorqin filtr

Rasmning yorqinligi uchun uchinchi parametrga to'g'ri keladi:


// Uchinchi parametr rasmning yorqinligini o'rnatadi.
Imahfilter ($ rasm, img_filter_bhton, 40);
Imagejpeg ($ rasm, », 90);
Imgestestroy ($ rasm);
?>

Gaussian Blur

Gauss ustidan xiralashgan, qo'shimcha parametrlar yo'q

Sarlavha ("Tarkib turi: rasm / JPEG");

$ rasm \u003d Imahcreatefromjpeg ("Cat.jpg");
Imahfilter ($ rasm, img_filter_giga);
Imagejpeg ($ rasm, », 90);
Imgestestroy ($ rasm);
?>

Qarama-qarshilik

Uchinchi parametr kontrastni aniqlaydi

Sarlavha ("Tarkib turi: rasm / JPEG");
$ rasm \u003d Imahcreatefromjpeg ("Cat.jpg");
Imahfilter ($ rasm, img_filter_ontrast, -15);
Imagejpeg ($ rasm, », 90);
Imgestestroy ($ rasm);
?>

O'rtacha qiymatni olib tashlash (naqsh effekti)

Qo'shimcha parametrlar yo'q.

Sarlavha ("Tarkib turi: rasm / JPEG");
$ rasm \u003d Imahcreatefromjpeg ("Cat.jpg");
Imahfilter ($ rasm, IMG_FILTER_MEMAN_ROMON);
Imagejpeg ($ rasm, », 90);
Imgestestroy ($ rasm);
?>

Rang balansi

Qizil, yashil, ko'k, shuningdek alfa kanalining (ixtiyoriy) to'yinganligini quyidagi tartibda o'rnatadi

Sarlavha ("Tarkib turi: rasm / JPEG");
$ rasm \u003d Imahcreatefromjpeg ("Cat.jpg");
// Alpha Channe parametrlari quyidagicha ko'rsatilmagan.
Imahfilter ($ rasm, img_filter_colorizatsiya, 50, 0, 0);
Imagejpeg ($ rasm, », 90);
Imgestestroy ($ rasm);
?>

Yangi uchrashuvlarga ...

Umid qilamanki, siz PHP-ga oid GD kutubxonasi bilan ko'proq yoki kamroq muammolarga duch kelasiz. Ikkinchi qismda biz ba'zi ilg'or texnikani ko'rib chiqamiz va, albatta, yanada qiziqarli narsalarni topamiz. GD kutubxonasidan va ijodiy qobiliyatingizdan foydalaning va menga nima borligini aytib bering!

Azizlar harakatlanuvchi ishtirokchilari! Bugun siz yana bir qiziqarli mavzuni kutmoqdasiz. Barchamizga yangi avatarlarni ijtimoiy tarmoqlarda yuklashimiz mumkin. Ammo ular xohlagan o'lchamga qanday tarashadi? Serverda nima bo'ladi? Bu va boshqa ko'plab savollar sizni mushuk ostida kutmoqda.

Ha, agar kimdir xabardor bo'lmasa, unda "Mushuk" (Inglizcha kesilgan), bu yangilikni qisqacha (umumiy ro'yxatda) baham ko'radigan joy va to'liq taqdimot uchun yangiliklarni baham ko'radigan joy.

Ko'pchilik bilaman, men o'z veb-saytlarini boshqarish tizimini kogir (cogear, http://gogear.ru) rivojlantirayotganimni bilaman. Hikoya murakkab va uzoq, ammo o'jarlik bilan maqsadga boring.

Keling, tasvirlar bilan ishlashning asosiy jihatlarini ko'raylik.

PHPda o'rnatilgan GD kutubxonasi mavjud. Bu haqda uning hujjatlari:

http://php.net/ru/baw.php.

Ushbu sahifada siz juda ko'p turli funktsiyalarni topasiz. Ammo qo'rqmang. Biz aniq aniq narsaga qiziqamiz.

Ko'rinib turibdiki, rasmlar bilan ishlash tartibi (funktsiyalar) shaklida sodir bo'lmoqda, shuning uchun ob'ektga yo'naltirilgan qobiq yozishi kerak.

Rasm bilan ishlashning eng oddiy namunasi:

Biz mahalliy mashinada harakat qilamiz.

Fayl yarating. image.php.(Menda tajriba uchun mahalliy domen bor sinov.local).

Biz test.local sayt papkasining ildizini qo'ydik: 1.jpg Image:

Http: //test.local/image.php (sizning holatingizda boshqa manzil).

Folder-dagi rasmni topamiz 2.jpg:

Ko'rinib turibdiki, nisbatlar saqlanib qolmaydi. Chunki biz ularni qayta tiriltirdik.

Biz skriptni qayta hisoblash uchun biz ssenariyimizni tuzatamiz:

$ nisbati_oriig) ($ kenglik \u003d $ balandlik * $ balandligi)), aks ($ balandlik \u003d $ COME \u003d $ CATETIGE)) RasmecopyRemaplePeded ($ rasm_p, $). Rasm, 0, 0, 0, 0, $ kengligi, $ balandligi, $ evaziga $ wrige_oriig); // displeyjpeg ($ case_p, 2.jpg ', 100);

Natijada ko'rib chiqamiz:

Balandligimizni qayta hisoblaganimiz sababli, oxirgi rasmning bir qismi qora rangga aylandi (yaratilgan tuvalning asl rangi).

Rasm bilan yana nima qila olasiz? Uni kesing, bir narsani boshqasiga qo'ying, ustiga chizing.

Ishonchim komilki, rasmlarim bilan ishlash uchun mening sinfimga qiziqasiz. Bu tizimdan tashqarida ishlamaydi, chunki u vosita (moduli) "rasmlar" uchun haydovchi.

Ammo o'zingiz uchun juda ko'p qiziqarli narsalarni topasiz:

* @Copyright Copyright (C) 2012, Belyayev dmitry * @/GOGAREMENSENSENT.HTMML * @LIND_GD EXPESSESENSENTLARI Image_Duarder_gd rasmlari Jamoat funktsiyasi yaratish () (harflar bo'yicha tavhompe_jpeg: harflar Imaile_jpeg2000: sumka -\u003e Manba \u003d Imahne \u003d Imahcreathrompg ($.) \u003e Info-\u003e Fayl); Imaccolortransparent ($ bu- Manba, Manba, Manba, 0, 0, 0, FALS) ($ bu - manba, manbang, haqiqiy); break; case IMAGETYPE_GIF: $ this-\u003e manba \u003d imagecreatefromgif ($ this-\u003e info-\u003e fayl); ImageColortransparent ($ this-\u003e manbai, imagecolorallocate ($ this-\u003e manbai, 0, 0, 0)); Tasviriyflling ($ bu-\u003e manbasi, noto'g'ri); Imagesavavfa ($ bu- Manba, Imaho-\u003e Film); tanaffus;)))) ** * rasmni buzadi * / Jamoat funktsiyasi yo'q () (Imeagestroy ($ bu -\u003e manbasi); Is_RreReurce ($ bu-\u003e Maqsad) && imageestroy ($ bu- manzil); ) / * ** * Maqsadli rasmni yaratadi * @ @param aralash $ * @param aralash $ * / Shaharlar balandligi ($ kengligi, rasm \u003d Tasvir balandligi, $ balandligi); Agar ($ bu-\u003e INFO-\u003e Turi \u003d\u003d Imahetpy_png_png \u003d\u003d $ (ushbu-\u003e Maqsad) ($ bu- maqsad, tasvir, 0, 0, 0)) ); ($ Bu-\u003e INFO-\u003e turini, FALSE); Imageavrealfa ($ bu- maqsad, rost); ($ bu- manzil, maqsad);) narxni qaytaring Rasm * * @ param int | Stream Lett Balandlik $ Levi balandlik balandligi * @ param str | FIT * @ @param int | Score Har qanday rasmni o'lchash, Pastga * @ Ob'ekt funktsiyasi ($ kengligi, $ balandligi, $ balandligi, $ comen \u003d "Har qanday") ($ kengligi ($ kengligi, "kengligi"); $ manbe_height \u003d $ bu-\u003e SmartSee ($ balandligi, balandligi »); // Agar siz tanlagan bo'lsangiz (// Agar tanlagan bo'lsa) Kengligi, keyin biz "kenglik" ishining kerakli nisbatlariga balandlik bilan balandlikni beramiz: $ lenta \u003d $ manbali_width; $ Balandligi \u003d dumaloq (($ manbang_width * $ bu-\u003e INFO-\u003e balandligi) / $ bu-\u003e info-\u003e kengligi ( Sindirish; // Agar balandlik o'rnatish moslamasi bo'lsa, kengligingizni "balandlik" holatini kerakli nisbatlarga bering: $ kenglik: $ (($ ($ ($ ($ ($ (INFO_NE-\u003e balandligi) ); $ Balandligi \u003d $ manbe_height; Sindirish; "Ekin" holati: agar ($ bu-\u003e INFO-\u003e BUYURTMAYTI) Ma'lumot -\u003e Balandligi); $ balandligi \u003d $ manbe_height; $ balandligi \u003d $ (($ ($ -\u003e INFO-\u003e Balandligi * $ bu-\u003e INFO-\u003e kengligi); ) Tanaffus; Standart ko'rsatkichi: Standart: "Fit" harfi :) // Agar rasm belgilangan o'lchamlardan kattaroqligini tekshiring (// Agar rasm ko'rsatilgan o'lchamlardan kattaroq bo'lsa, unda hech narsa bo'lmaydi: agar ( $ kenglik< $this->iNFO-\u003e Kengligi && $ balandligi< $this-> INFO-\u003e balandligi) (bu $ bu to'lov;) tanaffus; // Agar tasvir belgilangan o'lchamlardan kichik bo'lsa, unda "pastga" ga hech narsa bo'lmaydi: agar ($ kengligi\u003e INFOS-\u003e Kengligi\u003e $ bu-\u003e INFO-\u003e balandligi) bu;) tanaffus; "Har qanday" holat: odatiy: // hech narsa qilmaslik. Bilim) $ bu-\u003e Maqsad \u003d $ bu-\u003e Crearetarget ($ kengligi, $ balandligi); Agar (image\u003e Maqsad, $ bu- Manba, 0, 0, 0, 0, $ 0,\u003e INFO-\u003e LELD, $ ($ bu-\u003e manba \u003d $ bu-\u003e Maqsad; $ kengligi -\u003e INFO-\u003e Balandligi \u003d Agar $ ("Ekspoct" yoki $ "Markaz", "Markaz", $_width, $ manbang_hationth, $ comer_height); ) / ** * rasmni kesib tashlaydi * @ @param aralashtirilgan $ x * @param aralashtirilgan $ l @param aralash $ eriladigan balandlik * @param aralashmasi * @param aralash obyektlar * Jamoat funktsiyasi ($ x, $ y, $ kengligi, $ e \u003d $ bu-45) - $ e / kengligi ($ x)) - $ Y \u003d $ Bu-\u003e SmartSee-\u003e Y, "balandlik") - $ balandligi / 2; $ kengligi \u003d $ bu-\u003e SmartSee -\u003e "Balandligi"); $ bu-\u003e Maqsad \u003d $ bu-\u003e Crearetarget ($ kengligi, $ balandligi, $ 0, $ e, $ kengligi, $ e, $ -\u003e Manba \u003d\u003e bu-\u003e maqsad; $ kengligi -\u003e Ma'lumot - $ 4 balandligi \u003d $.) Birlashtirish (rasmingiz uchun $ x, $ x, $ x) ($ x, kenglik); $ y \u003d $ bu -\u003e "balandlik") ); if- (ISASECECTYMERAGE ($ bu - manbali, $ image-\u003e consecece (), $ x, $ y, 0, 0) , $ Case-\u003e Ob'ekt () -\u003e Image -\u003e Ob'ekt ($ cote-\u003e balandligi, %%)) () $ bu; ) / ** * Jamoat funktsiyasini saqlaydi ($ fayl \u003d , $ variantlar \u003d\u003e maqsadli va $ (Strpos ($ ($). Fayl, ".") Yoki $ fayl \u003d $ bu-\u003e Pato-\u003e Filim ($ uzat) ($ uzat) ($ uzat);) boshqa ($ 0) ($ fayl) ); $ fayl \u003d null;) tugmasini ($ uzat) ("JPG" yoki $ "variantlar \u003d 90; $ bu-$ variantlar, $ variantlar, $ "GIF": ImaccoorTrancent ($ bu-\u003e Maqsad, Rasmecoloralotatatatatalfa ($ bu- list, FALSE); Imageavealfa ($ bu- manzil, rost); IASGIF ($ bu-\u003e Maqsad, $ fayl); tanaffus; "png" yoki noto'g'ri, haqiqiy); agar ($ bu- / qayd, rost); ifadysavafa ($ variantlar); $ Sifat \u003d $ variantlar; $ filtrlar \u003d png_no_filter;), aks holda ($ sifati \u003d Ismet ("FIVES [" FIVES ["Sifat [" TEXNIK])? $ Imkoniyatlari ["Sifat"]: 9; $ Filtrlar \u003d Ismet ($ variantlar ["filtrlar"])? $ Imkoniyatlari ["Filtrlar"]: PNG_NO_FILTER; ) ImagePngg ($ bu-\u003e Maqsad, $ fayl, $ sifati, $ film); Sindirish; ) $ bu -\u003e yo'q qilish (); ) / ** ** Jamoat funktsiyasi ($ formati, $ variantlari) ($ bu-\u003e tejash ($ formati, $ variant);)

Bu tizimda qanday ishlaydi? Xo'sh, nima uchun kod?

Qarang:

$ rasm \u003d Yangi rasm ("1.jpg"); $ Casease-\u003e Researe (200,200, "kenglik") -\u003e Kuchlar (200,200) -\u003e Saqlash ("2, JPG);

Tushundingizmi? Avtomatik ravishda barcha kerakli formatlar bilan ishlaydi. Funktsional, agar kerak bo'lsa, kengaytirilishi mumkin.

Siz uchun uy vazifasi yuqorida ko'rsatilgan narsalarni (mening sinfimga) mahalliy mashinada amalga oshiradi. Agar parametrlar bilan tajriba va vaqtni xohlasangiz.