Ikon på billedet

Tags:    php
Skrevet af Bruger #4304 @ 18.11.2004

Indledning


Min knapt så kreative hjerne er kommet op med titlen ”Ikon på billede” til denne artikel, hvilket jo ikke er den mest ”ligetil” titel, men det går kort og godt ud på:
Ved brugen af PHP og GDLib vil jeg placere et billede oven på et andet, hmm tja, det kan f.eks. se ud som følgende:


Jeg håber det gjorde det hele lidt mere forståeligt, for nu starter det. Dog skal jeg lige sige, at de billeder jeg bruger som ikoner er PNG-24, og der er derfor understøttelse af 8-bit transparent(eller hvad det nu heder, hold mig ikke på det korrekte ord), ”that’s why kids, when you try this at home, remember to use PNG-24”.

IconizeImage


Tja vi springer ud i det med det samme. Jeg har lavet en funktion som jeg har valgt at kalde IconizeImage, og det den gør er at smide et billede oven på et andet, som denne artikel jo handler om (så det var da meget heldigt):
Fold kodeboks ind/udKode 


Funktionen indeholder 3 argumenter. Det først værende det billede du vil lægge et ikon på, den næste selve ikonet, det sidste argument er hvad det billede du vil lave skal hede. Jeg vil lige sige nu mens jeg er i gang at funktionen kun er lavet til eksemplet her, den kan laves en del mere brugervenlig, hvis man ikke helt ved hvad man vil gemme sine billeder som. Det skal lige siges at de 2 første argumenter skal være image ressources, du skal altså f.eks. selv bruge imagecreatefromjpng hvis det er et png billede du arbejder med. Lad mig lige give et eksempel:
Fold kodeboks ind/udKode 


De 2 billeder jeg har brugt heder icback.jpg (billedet jeg ønsker skal havde et ikon) og icon.png (ikonet). Når men lad mig hurtigt løbe koden igennem.
Først finder vi størrelsen af ikonet, som skal bruges når man kopiere dette over på det baggrundsbilledet.
Den kommenterede linje kan du vælge at fjerne, men i tidligere PHP versioner er alphablending ikke slået til pr. standard, og du skal derfor uncomment denne del af koden hvis din alphakanal ikke regnes med når billedet kopieres (hvis du ikke er helt med her, så gør det ikke noget hvis du har en nyere version af PHP skal der slet ikke tænkes på dette).
Dernæst kopieres de to billeder ovenpå hinanden. Slå evt. denne funktion op i php manualen, for at vide hvilken argumenter der er placeringen af de forskellige billeder.
Så laves billedet, denne gang som et jpeg billede men i konklusionen lige som lidt vil jeg sammenligne resultatet mellem et jpeg og et png.

Konklusion


Jeg håber du har forstået hvordan det hele virker, for den funktion jeg har lavet er mest til test, den ville ikke gøre sig godt i et større system.
Denne viden ville man kunne gøre god brug af, hvis man havde et billede galleri, kunne man smide sit eget lille ikon på alle billederne efterhånden som de blev uploadet. Men nok om hvad man egentlig kan bruge det til, jeg tænkte nemlig på at kigge lidt på det sidste billede man ville få ud af det hele.
Jeg har valgt at bruge følgende billeder som test billeder(det første er baggrunden og det andet er ikonet):



Jeg har valgt og prøve at gemme disse to billeder som henholdsvis png og jpeg, resultatet blev følgende. Dette kræver du ændrer følgende linje:
Fold kodeboks ind/udKode 

til
Fold kodeboks ind/udKode 

Og for en ordensskyld så lav navnet på $imgDest om til iconized.png. Resultatet ser ud som følgende, png til venstre og jpeg til højre, (det skal dog siges at jeg har brugt en lav jpeg kvalitet til billedet der skal vises her, hvis du selv vil prøve dette, så hent baggrundsbilledet ovenfår og ikon billedet til sidst i artiklen):


På trods af den lidt gnidrede jpeg kvalitet kan man tydeligt se, at hvis man laver den endelige fil i png vil ens resultat på ikonet man laver blive langt bedre end hvis dette gemmes som jpg. Der er dog lige en lille (bør læses stor) faktor som gør det ikke altid er lige smart bare at gemme som png. Størrelsen på billedet, bruger man jpeg (selv med dårligste komprimering og bedste kvalitet) vil billedet høstsandsynligt blive mindre end billedet i png, i mit eksempel er størrelserne som følgende:
JPEG: 81,788 kb
PNG: 191,854 kb
Dette svare i mit eksempel til at png billedet er 2,3 gange større end mit jpeg. Og arbejder man med dette til hjemmesider (hvilket man højst sandsynligt gør) har størrelsen alligevel noget at skulle havde sagt. Men det er jo alt sammen op til den enkelte.
Jeg håber som sagt, at der er nogen som har lært lidt af denne artikel på trods af det endte med at blive mere konklusion end egentlig kode. Når ja og som jeg lovede så kan du nedenfor hente ikon billedet jeg har brugt:


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (13)

User
Bruger #1151 @ 18.11.04 23:49
God artikel. Kan godt lide artikler hvor man viser hvordan man bruger koden praktisk :)
User
Bruger #6478 @ 04.01.05 16:55
Dejligt med en artikel med billeder :)
Synes du beskriver godt hvordan man får tilføjet vandmærket til billedet.
Ros herfra!
User
Bruger #6336 @ 12.05.05 12:16
SuperNice!
prøv evt at se hvad jeg har fået ud af det på http://www.foxer.be/~mrnielsen/?page=billeder.php
(de skal vises stor før det ses)
User
Bruger #6731 @ 12.05.05 15:27
Fedt!
User
Bruger #2533 @ 13.06.05 15:03
forstår ikke helt artiklen og kan ik få den til at virke, kan i ikke give et eksempel på hvordan hele pp filen skal se ud???
User
Bruger #2533 @ 13.06.05 15:04
pp=php
User
Bruger #6840 @ 01.07.05 21:09
er det sådan at der er en der kan fortælle mig hvordan jeg får mit vandmærke ned i højre hjørne af billedet :)?
User
Bruger #6840 @ 01.07.05 21:17
tror jeg har fundet et alternativ, fik vidst ikke sagt at det er en _suveræn_ artikel du har fikset sammen der
User
Bruger #9151 @ 11.02.06 17:10
Kan du også lave dette ikke med et billede på billedet men med tekst på billedet?
User
Bruger #5426 @ 26.02.06 20:05
Det er en helt fin artikel, men jeg synes dog ikke at den helt går dybt nok. Jeg har selv arbejdet videre på den, så den automatisk virker med PNG, JPG og GIF, og det var ikke mega svært, så det kunne du måske overveje at skrive videre om på et tidspunkt.
User
Bruger #4265 @ 14.03.06 10:53
Udemærket artikel, men savner lidt forklaringer på selve koden, og nogle evt. ting man selv kan arbejde videre med.

Men ellers så er det en god start.
User
Bruger #10050 @ 23.06.06 07:34
jeg kan ikke få det til at virke
User
Bruger #12656 @ 04.11.07 10:42
Fed artikel. Jeg synes du beskriver det hele godt. Selv jeg forstod artiklen, og jeg er ellers snotdum for sådanna ting. :roll:
Du skal være logget ind for at skrive en kommentar.
t