Använd ImageMagick för dynamiska bild
2006-01-28 - atlas
796
php
Jag är en rätt lat person, så om jag ska göra en layout som har en hög olika bakgrundsbilder som min nuvarande har så tänker jag att det är ju synd om jag ska behöva använda PhotoShop för varje bild för att fixa till den och sen försöka komma ihåg hur jag gjorde en månad senare när jag vill ha fler bilder. Är det inte enklare om jag bara kan lägga JPG-bilder i en mapp och låta ett script skapa bilderna åt mig? Klart det är!
Vid närmare eftertanke så kan jag ju förenkla detta i PhotoShop med, bara man använder en Batch, men nu vill jag ju göra det med PHP och ImageMagick förstås. Så här skriver jag om hur det går till.
Vad vi har är alltså en mapp full med originalbilder, och sen en "overlay"-bild som vi ska lägga över varje bild. Bildmappen ligger till exempel i "/Webserver/Bilder/Bakgrunder" och overlay-bilden ligger kanske i "/Webserver/Bilder/overlay.png"
Det är viktigt att vi använder ett bildformat för overlay-bilden som stöder transparens, och PNG är det jag använder. I mitt fal ska alltså bakgrundsbilden sparas om men med den vita "mittendelen" påklistrad, samt en vit "fade" i botten. Båda dom ligger i en overlay jag skapat som man kan ladda ned här. Den ser helt vit ut med lite skugga, men det för att dess funktion är att lägga en vit semi-transparent lager över andra bilder, så mot vit bakgrund funkar den ju inte.
Så, först så ska vi leta rätt på vilken bakgrundsbild vi ska använda, och i mitt fall så vill jag att bakgrundsbilden ska väljas slumpartat men ska vara densamma i en timme, sen ska en ny slumpas fram. I PHP så gör man detta med funktionen srand() som matar slumpgeneratorn med det värde den ska utgå från, vilket gör att det alltid blir samma "slumpmässiga" resultat om ni hajjar.
Så, först letar vi rätt på informationen:
while (false !== ($file = readdir("/Webserver/Bilder/Bakgrunder"))){     if (in_array($file, array(".", ".."))) continue;     $bkgrs[] = $file;   }
Och nu har vi en array med alla bilder som finns i vår mapp med bakgrundsbilder. Nu ska vi ta fram en slumpartad
srand(date("YmdH"));   shuffle($bkgrs);   $bkgr = $bkgrs[0];
Som ni ser så matar jag srand med värdet som date("YmdH") ger mig, vilket blir år, månad, dag och timme, i ett - 2006012812 till exempel för klockan 12 den 28 januari i år. Sen kör jag shuffle() på arrayen vilket slumpar den efter det värde jag givit via srand(). Nu innehåller variabeln $bkgr filnamnet på vår bakgrundsbild, till exempel "blomma.jpg". Nu ska vi fixa till den.
if (!file_exists("/Webserver/Bilder/Bakgrunder_fixade/$bkgr")){     prime_bkgr($bkgr);   }
Så, om vi inte redan har omvandlat den här bilden (eftersom vi vill bara göra detta en gång per bild) så ska vi nu köra funktionen som kombinerar bilderna. Så här ser funktionen ut:
function prime_bkgr($file){     $p = "/Webserver/Bilder/";     system("convert -geometry !1600x1200 $p/Bakgrunder/$file $p/temp.jpg");     system("composite $p/overlay.png $p/temp.jpg $p/Bakgrunder_fixade/$file");   }
En snabb genomgång. ImgeMagickfunktionen som heter "convert" konvetrerar bilder, från olika format och skalar dem och mycket mer. Här ser vi till att alla bilder är exakt 1600x1200 pixlar stora eftersom det är det overlay-bilden är anpassad efter.
Composite, däremod, kombinerar bilder med varandra, vilket är det vi vill göra sen. Vi säger bara åt den att kombinera två bilder och spara den som en tredje bild.
Sedan skriver vi ut en CSS-deklaration för den nya bilden:
   body {       background-image: url(/Bilder/Bakgrunder/<?=$bkgr ?>);       background-attachment: fixed;       background-repeat: no-repeat;    }
Lite imponerad hur mycket Apple Watch kan hålla reda på bär man simmar faktiskt
Får lite välbehövlig hjälp att fixa med elen i verkstaden
Improvisationsteater på Västmanlandsteatern. Lika delar pinsamt och skoj :)
Har ryggskott som börjar bli bättre. Nyser nu på morgonen och det hugger till i ryggen och gör ont som fan. Kollapsar på golvet, och när jag reser mig upp så har jag råkat få igång Siri som tror sig ha hört detta. Ok, det gör ont som fan, men jag är ok, Siri :)
Har en trappa hemma som måste renoveras, menrenoveringskit är dyra som tusan, tanken är att jag ska bygga eget renoveringskit, får se hur det går…
Bakbunden
Även en ordentlig geringsfräs för att kunna bygga hållbara trappnosar
Har införskaffat mig en planopress inför kommande bordsprojekt samt ett test för en trapprenovering.
Byggde en pokalhylla till dotterns alla danspokaler
Pricken över i:et :)
Bakbord
Nytt projekt på gång, bakbord till svärfar :)
“Gå och lägg dig” - ”Nej jag kollar på TV med Leia” :)
Extrabord till jul
Extrabord till julafton klart! Byggvideo kommer inom kort på min youtube :)
Weehoo, jag har en egen stämpel nu. Det ni!
Bordskiva oljad och vaxad, ben borstade och betsade. Kanske blir ett bord till slut?
Bordsskiva betsad. Ska slipas/borstas och sen oljas.
Renoverat vardagsrumsbord
Favoritbild från dansuppvisningen igår
Nattduksbord
PanPastel-porträtt
Crock Pot
PanPastel
Tron för Sigge
Road Trip Italien!
Verkstad Remake
Jonas och Jenna
Brud som chillar
Showing off
Undressing
Touch thyself
Hot Love
Profilporträtt
Resa utan kamera?
Paus
Supernöjd med folieringen!
Bilen ska folieras!
Ny såg
PHP och BankID
Jack Skellington
Verkstadsplaner
Magnettavla
Verandatak och grillhörna!
Vardagsrumsbord
Knivblock
Kökshylla
Ny ikon för karta
PC-bygge
Kerlee 35mm f/1.2
Objektivhylla
Natalie Dormer
Hållare till kattmatsskålar
Hälsningar från Norge
With a little help from my friends...
The Most Incredible Fantasy Maps You've Ever Seen
Cityfestivalen
Mitakon Speedmaster 50mm/f0,95
10 minuter vatten
Sony A7R II
Petzval 58 Bokeh Control Art Lens
Scrawlrbox
Nya skärmar till jobbet
Nikon Df - ny leksak
Boba Fett
First Order Storm Trooper
Mikisen
#inlineditbutton