Δημιουργια image headings on the fly

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δημιουργια image headings on the fly

Δημοσίευση από korgr » 16 Μαρ 2010 10:28

Σας παραθετω ενα php script με το οποιο μπορουμε να δημιουργουμε για τις ιστοσελιδες μας, headings με την τυπογραφια που επιθυμουμε!
Απαραιτητη προϋποθεση ειναι να υποστηριζεται στην php εγκατασταση σας, η GD Library με freeType Support.

Εικόνα

Το script μας το καλουμε οπως καθε συνηθισμενο image πχ

Κώδικας: Επιλογή όλων

<img src="makeheader.php?text=<? echo&#40;urlencode&#40;'Ο τίτλος μας εδώ'&#41;&#41;;?>" alt="Ο τίτλος μας εδώ" />
Η μονη απαραιτητη παραμετρος ειναι η μεταβλητη "text" που αντιπροσωπευει το κειμενο του heading image.
Υποστηριζονται επίσης οι εξης προαιρετικοι παραμετροι:

fontSize: Το μέγεθος του κειμένου σε pixels
bgcolor: Το χρωμα του background σε δεκαεξαδικη μορφη (με ή χωρις το #)
fcolor: Το χρωμα του κειμενου σε δεκαεξαδικη μορφη (με ή χωρις το #)
antialias: Με τιμη 1, δημιουργει μια antialias σκια στους χαρακτηρες του κειμενου

Παραδειγμα με χρηση ολων των παραμετρων:

Κώδικας: Επιλογή όλων

<img src="makeheader.php?text=<? echo&#40;urlencode&#40;'Ο τίτλος μας εδώ'&#41;&#41;;?>&fontSize=24&bgcolor=4e4e4e&fcolor=777763&antialias=1" alt="Ο τίτλος μας εδώ" />
Το script παρεχει βασικη προστασια για το hotlinking μεσω session μεταβλητης. Αν πριν καλεσετε το script αποθηκευσετε μια μυστικη μεταβλητη πχ "useAllowed" με τιμη 1, το script δεν θα εκτελεσθει αν δεν επιβεβαιωσει αυτη την μεταβλητη που θα ορισετε.

Υπαρχουν οπως παντα πολλα comments που θα σας βοηθησουν να τροποποιησετε αν χρειαστει τον κωδικα συμφωνα με τις δικες σας αναγκες.
Αποθηκευστε τον κωδικα που ακολουθει σαν makeheader.php

Κώδικας: Επιλογή όλων

<?php
session_start&#40;&#41;;
 // αν δεν δωθει τιμη στην $text ή έχει έρθει το request εκτος του site μας, τον τουταχαμον!
if&#40;!isset&#40;$_GET&#91;'text'&#93;&#41; || !isset&#40;$_SESSION&#91;'useAllowed'&#93;&#41;&#41;&#123;exit;&#125;

// προσθήκη whitespace σε περιπτωση που εχουμε margin=0
$text = urldecode&#40;$_GET&#91;'text'&#93;&#41;." "; 

 // το fontSize αν δεν ορισθει μεσω GET variable
$defaultSize = 19;

// το περιθωριο που θα εχει δεξια-αριστερα το κειμενο απο τα ορια του image
$margin=0; 

// ορισμος του fontSize
$size=&#40;isset&#40;$_GET&#91;'fontSize'&#93;&#41;&#41;? $_GET&#91;'fontSize'&#93; &#58; $defaultSize; 

// Δημιουργια header για να σερβιρουμε τον header ως png image &#40;καλυτερη ποιοτητα&#41;
header&#40;'Content-type&#58; image/png'&#41;; 

// Ορισμος της γραμματοσειρας που θα χρησιμοποιηθει. Να ορισθουν δικαιωματα εγγραφης στον φακελο "fonts"
$font = 'fonts/myfont.ttf'; // αντικαταστηστε με την δικη σας γραμματοσειρα

// ορισμος διαστασεων του μεγεθους του image
$bbox = imagettfbbox&#40;$size, 0, $font, $text&#41;;
$imgWidth=$bbox&#91;2&#93;+&#40;$margin*2&#41;;
$imgHeight = $size+$bbox&#91;3&#93;+2;

// Δημιουργια κενου image με αυτες τις διαστασεις
$im = imagecreatetruecolor&#40;$imgWidth, $imgHeight&#41;;

// Ορισμος default χρωματος για το background σε περιπτωση που δεν ορισθεί κάποιο άλλο μεσω της GET
$defaultBackgroundColor = imagecolorallocate&#40;$im, 255, 255, 255&#41;; // white

// Ορισμος default χρωματος για το χρώμα του κειμένου σε περιπτωση που δεν ορισθεί κάποιο άλλο μεσω της GET
$defaultForegroundColor = imagecolorallocate&#40;$im, 85, 85, 85&#41;; // grey

// Ορισμος του χρωματος για το background με αυτοματη επιλογη μεταξυ default και της $_GET&#91;'bgcolor'&#93;
$bgcolor = &#40;isset&#40;$_GET&#91;'bgcolor'&#93;&#41;&#41; ? colorAlocate&#40;$_GET&#91;'bgcolor'&#93;, $im&#41; &#58; $defaultBackgroundColor;

// Ορισμος του χρωματος για το κείμενο με αυτοματη επιλογη μεταξυ default και της $_GET&#91;'fcolor'&#93;
$fcolor = &#40;isset&#40;$_GET&#91;'fcolor'&#93;&#41;&#41; ? colorAlocate&#40;$_GET&#91;'fcolor'&#93;, $im&#41; &#58; $defaultForegroundColor;

// Γεμισμα του image με το background Color που επιλέχθηκε
imagefilledrectangle&#40;$im, 0, 0, $imgWidth, $imgHeight, $bgcolor&#41;;

// Σε περιπτωση που ορισουμε antialias shadow μεσω της GET
if&#40;$_GET&#91;'antialias'&#93;&#41;&#123;
$shadow=  imagecolorallocate&#40;$im, 187, 187, 187&#41;;
imagettftext&#40;$im, $size, 0, $margin+1, $size+1, $shadow, $font, $text&#41;;
&#125;

// Δημιουργια του κειμενου του header μας μεσα στο Image
imagettftext&#40;$im, $size, 0, $margin, $size, $fcolor, $font, $text&#41;;

// αποστολη του image στον browser
imagepng&#40;$im&#41;;

// αποδεσμευση μνημης
imagedestroy&#40;$im&#41;;

// function που μας επιστερεφει το RGB Space της imagecolorallocate ενω εχουμε ορισει καποιο χρωμα σε #δεκαεξαδικη μορφη μεσω της GET
function colorAlocate&#40;$color, $im&#41;&#123;
    if &#40;$color&#91;0&#93; == '#'&#41;
        $color = substr&#40;$color, 1&#41;;
    if &#40;strlen&#40;$color&#41; == 6&#41;
        list&#40;$r, $g, $b&#41; = array&#40;$color&#91;0&#93;.$color&#91;1&#93;, $color&#91;2&#93;.$color&#91;3&#93;, $color&#91;4&#93;.$color&#91;5&#93;&#41;;
    elseif &#40;strlen&#40;$color&#41; == 3&#41;
        list&#40;$r, $g, $b&#41; = array&#40;$color&#91;0&#93;.$color&#91;0&#93;, $color&#91;1&#93;.$color&#91;1&#93;, $color&#91;2&#93;.$color&#91;2&#93;&#41;;
    else
        return false;
    $r = hexdec&#40;$r&#41;; $g = hexdec&#40;$g&#41;; $b = hexdec&#40;$b&#41;;
    return  imagecolorallocate&#40;$im, $r, $g, $b&#41;;
&#125;
?>
Αν δεν επιθυμειτε την προστασια μεσω της session var αντικαταστηστε στην αρχη αυτο:

Κώδικας: Επιλογή όλων

session_start&#40;&#41;;
 // αν δεν δωθει τιμη στην $text ή έχει έρθει το request εκτος του site μας, τον τουταχαμον!
if&#40;!isset&#40;$_GET&#91;'text'&#93;&#41; || !isset&#40;$_SESSION&#91;'getHeader'&#93;&#41;&#41;&#123;exit;&#125;
με αυτο!

Κώδικας: Επιλογή όλων

 // αν δεν δωθει τιμη στην $text τον τουταχαμον!
if&#40;!isset&#40;$_GET&#91;'text'&#93;&#41;&#41;&#123;exit;&#125;
Demo

Coding is fun 8)
Enjoy!
Τελευταία επεξεργασία από το μέλος korgr την 16 Μαρ 2010 15:29, έχει επεξεργασθεί 2 φορές συνολικά.

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Δημιουργια image headings on the fly

Δημοσίευση από Basilakis » 16 Μαρ 2010 10:37

Thx a lot Noti!

Tutorialized! :D

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Δημιουργια image headings on the fly

Δημοσίευση από Rapid-eraser » 16 Μαρ 2010 11:58

Μια προσθήκη θα ήθελα να κάνω στο κατά τα άλλα άψογο Tut.

Το path που περιέχει το font αναλόγως με το αν είναι Windows ή Linux like (έχει σχέση με την version της GD lib) πέρνει ή δεν πέρνει κατάληξη.

Κώδικας: Επιλογή όλων

$font = 'fonts/myfont.ttf'; 

ή

$font = 'fonts/myfont';  
Οπότε αν δείτε να κάνει fail η imagettftext πολύ πιθανόν να θέλει ρύθμιση το filename.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δημιουργια image headings on the fly

Δημοσίευση από korgr » 16 Μαρ 2010 12:21

Thanks rapid, δεν το ηξερα αυτο!

Basilakis ευχαριστω για την γρηγορη ανταποκριση! :wink:

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δημιουργια image headings on the fly

Δημοσίευση από korgr » 16 Μαρ 2010 12:28

Edit
Διορθωθηκε το link του demo για να ξεπερνα το προβλημα ασφαλειας
Demo

Άβαταρ μέλους
Cypriot
Δημοσιεύσεις: 355
Εγγραφή: 20 Οκτ 2009 15:43

Δημιουργια image headings on the fly

Δημοσίευση από Cypriot » 16 Μαρ 2010 14:57

ωραίο(ς)...

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Δημιουργια image headings on the fly

Δημοσίευση από vassilism » 16 Μαρ 2010 16:32

Πολύ ωραίο Νότη, μπράβο.
Άλλο ένα μπράβο επίσης και για τα σχόλια στον κώδικα :clap:

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

Δημιουργια image headings on the fly

Δημοσίευση από vcore » 17 Μαρ 2010 21:33

+1
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες