cursuri cursuri cursuri cursuri cursuri cursuri
cursuri
cursuri
cursuri
Cursuri    Tutoriale    Teste    Referate    Jocuri
 
 
cursuri Am uitat utilizatorul cursuri Am uitat parola
cursuri online Cursuri online
Cursuri online gratuite
cursuri online Tutoriale
Cum sa faci orice
cursuri online Teste online
Testeaza-ti cunostintele
cursuri online Revista
Aboneaza-te gratuit
cursuri online Referate
Descarca referate
cursuri online Jocuri
Jocuri educative
cursuri online Inregistreaza-te
Intra in comunitate
eCursuri » Tutoriale » Programare, Web Design » PHP » Cum sa scrii text peste o poza cu PHP
Cum sa scrii text peste o poza cu PHP
tutorial scris de
mihai.mitroi
07 februarie 2012 / 689 afisari
Cum sa scrii text peste o poza cu PHP'
In acest tutorial te voi invata cum sa scrii un text peste o poza folosind doar un script PHP. Probabil ca de multe ori ai vrut sa pui poze pe un site, dar sa nu le poata folosi nimeni, avand fie un text, fie un logo pe ele.

Poti face acest lucru cu un program de editare grafica, cum este Photoshop, dar daca ai sute sau chiar mii de poze? Le vei lua pe rand? Nu cred ca ar fi placut lucrul acesta.

Un simplu script PHP poate usura enorm aceasta munca si te poate scuti de ore de trudit manual la fiecare poza.

Hai sa vedem cum poti realiza acest lucru. Mai intai pune toate pozele pe care vrei sa le scrii intr-un folder pe serverul tau. Apoi, creeaza inca un folder gol si ai grija sa aiba permisiunile de scriere puse. Altfel, scriptul PHP va da o eroare si nu vei putea scrie pe pozele tale.

Ultimul lucru este sa rulezi scriptul PHP, pe care ti-l voi detalia mai jos si gata. Toate pozele tale se vor regasi in noul folder, dar modificate, cu textul ales de tine scris pe ele.

Iata scriptul PHP care face aceasta treaba extrem de folositoare:
<?php
// seteaza tipul de continut
header('Content-Type: image/jpeg');

$path = "../imagini/";
$dir = @opendir($path) or die("Nu am reusit sa deschis folderul $path");
$files = array();
     while ($files[] = readdir($dir));
     sort($files, SORT_NUMERIC);
     closedir($dir);

     foreach ($files as $file)
     {
         if($file == "." || $file == ".." || $file == "index.php" || $file == "")
         continue;
         // creeaza imaginea
         $im = imagecreatefromjpeg("../images/joc/$file");

         // creeaza cateva culori pentru a le folosi in text
         $white = imagecolorallocate($im, 255, 255, 255);
         $grey = imagecolorallocate($im, 128, 128, 128);
         $black = imagecolorallocate($im, 255, 255, 255);

         // textul care va fi scris pe poza
         $text = 'www.Ecursuri.ro';

         // fontul utilizat
         $font = 'GILSANUB.TTF';

         // adauga o umbra textului
         imagettftext($im, 12, 0, 122, 135, $grey, $font, $text);

         // adauga textul
         imagettftext($im, 12, 0, 121, 134, $black, $font, $text);

         // salveaza imaginea in noul folder
         imagejpeg($im, "../imagini_noi/$file");
         echo $file."<br>";
     }

?>

Dupa cum vezi, scriptul este foarte simplu. Intai am specificat tipul de fisier pe care il va salva scriptul, in cazul nstru jpeg, dar poti pune si gif sau png, daca vrei.
header('Content-Type: image/jpeg');

Apoi am specificat folderul in care se afla pozele noastre.
$path = "../imagini/";

Cu o bucla incepem sa luam fiecare poza fin folderul nostru si s-o modificam. Totul se intampla in aceasta bucla. Verificam ca fisierul pe care il modificam sa fie o imagine:
if($file == "." || $file == ".." || $file == "index.php" || $file == "")

Creeam imaginea noua cu functia imagecreatefromjpeg din biblioteca de functii GD a PHP. Ai grija ca aceasta biblioteca sa fie instalata pe serverul tau, altfel vei primi o eroare si scriptul se va incheia prematur.
$im = imagecreatefromjpeg("../images/joc/$file");

Urmeaza sa creeam cateva culori pe care le vom folosi la scrierea textului cu functia imagecolorallocate care are nevoie de culoarea in format RGB.
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 255, 255, 255);

Apoi scriem textul cu functia imagettftext care are nevoie de tipul de font folosit, dimensiunea, coordonatele pe cele doua axe ale textului si de o culoare.
imagettftext($im, 12, 0, 121, 134, $black, $font, $text);

La final, salvam poza in noul folder pregatit initial si cam asta este tot.
imagejpeg($im, "../imagini_noi/$file");
Citeste si alte tutoriale asemanatoare:
cursuri
Cum sa instalezi PHP 5 cu Apache pentru Windows
Cum sa instalezi PHP 5 cu Apache pentru Windows: daca vrei sa instalezi PHP pe un calculator propriu, exista doua posibilitati pentru ...
cursuri
Cum sa testezi daca un sir este localizat in interiorul altui sir in MySQL
Iti voi arata in acest tutorial cum sa vezi daca un sir se gaseste in interiorul altui sir. Vom face acest lucru cu functia LOCATE(), ...
cursuri
Cum sa afli valoarea minima a unei coloane intr-o tabela MySQL
Daca vrei sa afli care este inregistrarea cu valoarea cea mai mica dintr-un set de inregistrari dintr-o tabela MySQL, vei folosi functia ...
13 comentarii
bamse 07 februarie 2012, 10:55 1
Foarte bun tutorialul, insa am o mica intrebare: la unul dintre site-urile mele, la articolele/postarile mai vechi aveam o dimensiune la poze (data din Photoshop de 100x100 px), iar acum la noile postari, pozele au dimensiunea de 220x110 px si am facut din programare sa ia automat pozele cele vechi si sa le faca resize la 220x110 px (stiu ca se vad pixelate) si inca nu am apucat sa le refac la noua dimensiune (manual in Photoshop)... acum daca aplic ce ati scris in tutorial, cum se va vedea text-ul pe pozele cele vechi (cele care au automat resize si sunt cam pixelate) ? Multumesc frumos si astept un raspuns. Cu stima
  2    Raspunde
mihai.mitroi 07 februarie 2012, 11:24 2
@bamse: Chiar daca maresti poza, textul se va vedea la fel de bine. Nu va fi pixelat.
  0    Raspunde
bamse 07 februarie 2012, 11:30 3
@mihai.mitroi: Salut, multumesc frumos pentru raspuns, o sa incerc sa aplic pas cu pas tot ce se afla in tutorial si o sa revin pentru a va povesti daca a mers si daca am intampinat probleme. Multumesc
  0    Raspunde
Rammstein 07 februarie 2012, 11:06 4
Salut, se poate si un demo, ceva ? De exemplu, daca eu am pozele de dimensiunea 220x110 si vreau textul pe marginea de jos, cum ar trebui sa introduc coordonatele ? Multumesc frumos
  0    Raspunde
mihai.mitroi 07 februarie 2012, 11:28 5
@Rammstein: Daca vrei sa ai textul pe marginea de jos a pozei, scazi din inaltimea pozei dimensiunea fontului cu care vei scrie textul si spatiul care vrei sa iti ramana intre text si marginea de jos. In felul asta vei afla unde va trebui plasat textul pe coordonata Y. Similar, poti face si pentru coordonata X, adica marginile stanga - dreapta.
  0    Raspunde
Rammstein 07 februarie 2012, 12:20 6
De cate ori trebuie rulat acest script? Sa spunem ca eu pun poze noi in folderul initial de 4 ori pe zi, eu de cate ori trebuie sa rulez scriptul ? Ce se intampla cu pozele pe care a fost deja adaugat watermark-ul ? Sunt rescrise sau ignorate?
  0    Raspunde
mihai.mitroi 07 februarie 2012, 16:56 7
@Rammstein: Scriptul poate fi rulat oricand, dar daca vrei sa apara imediat poza buna, va trebui sa faci lucrul acesta imediat ce-ai pus o poza noua. Poti utiliza pentru acest lucru si un cron care sa ruleze singur la un anumit interval, in functie de cat de des pui pozele.
  0    Raspunde
Rammstein 07 februarie 2012, 12:22 8
Inca o intrebare: ce fac daca in acel folder am toate tipurile de imagini? Adica, trebuie sa am cate un script ca acesta pentru jpeg, unul pentru png si altul pentru gif-uri ?
  0    Raspunde
mihai.mitroi 07 februarie 2012, 16:57 9
@Rammstein: Da. Pentru ca la inceputul scriptului tu trebuie sa ii spui acestuia tipul de extensie. Plus ca functiile difera putin pentru fiecare tip de fisier.
  0    Raspunde
Rammstein 09 februarie 2012, 11:15 10
Salut din nou Mihai, am vazut in script ca fontul este trecut astfel: $font = 'GILSANUB.TTF'; intrebarea mea este: trebuie sa avem undeva anume pe server acest font? Si 2, nu inteleg $file == "index.php" care mai apoi apare in cod iar cu $file... Mie unul nu imi iese treaba ... si nu stiu unde gresesc...
  0    Raspunde
mihai.mitroi 09 februarie 2012, 11:44 11
@Rammstein: Da, daca este un font neconventional, trebuie sa fie pe server in format TTF. Variabila $font contine calea spre acel font. $file == "index.php" iti spune ca daca exista un fisier de genul asta, sa fie ignorat. Conteaza mai putin asta. Poti sa ignori linia aceasta si s-o lasi asa cum este.
  0    Raspunde
Rammstein 14 februarie 2012, 13:58 12
Salut din nou, nu s-ar putea adapta acest script ca el sa ruleze instant, la fiecare upload de poza noua ? Ma refer la faptul ca, atunci cand urci o noua poza, el sa ii puna watermark automat.
  0    Raspunde
mihai.mitroi 17 februarie 2012, 11:54 13
@Rammstein: Da. Se poate. Il pui in admin, in pagina de adaugare, cu un include, imediat dupa sectiunea de cod care a realizat adaugarea.
  0    Raspunde
Adauga comentariu

Pentru a adauga comentarii trebuie sa fii membru eCursuri.ro

Intra in contul tau sau inregistreaza-te GRATUIT (dreapta sus)
Publicitate
Citeste si ... Tutoriale noi
Cum sa afli de unde vin vizitatorii site-ului tau
Cum sa transformi caracterele speciale folosind PHP
Cum sa convertesti un tablou PHP la variabile scalare
Cum sa generezi parole aleatorii cu PHP
Cum sa cream un fisier utilizand PHP
Cum sa convertim formatul de data PHP la formatul de data MySQL
PHP si sesiunile
Operatorii PHP
Cum sa modifici tipul unei variabile
Cum sa instalezi PHP 5 cu Apache pentru Windows
cursuri
Copyright © 2005-2011 - eCursuri.ro - toate drepturile rezervate - E-mail: contact@ecursuri.ro