Jag har en nöt som visat sig extra svår att knäcka...
Här är vad jag vill åstadkomma:
1. Användaren laddar upp en bild via ett formulär
2. Bilden läggs in i en mysql-databas
3. Skapa en tumnagel i JPG-format (oavsett om uppladdad bild är GIF eller JPG) och lägg in den i databasen också
Jag har inga som helst problem med 1 eller 2, men att skala om bilden och lägga in den i databasen har visat sig svårare än jag kunde ana. Här är vad jag gör hittills:
Inga konstigheter här - bilden läggs in i tabellen jättefint, precis som den ska. Men nu vill jag alltså skapa en ny bild som är proportionellt omskalad till max 50 pixlars höjd och max 50 pixlars bredd och sen lägga in den i ett annat fält i samma databas.
Njae, där skalas ju bilden om dels med ett tredjepartspaket och dels till filsystemet. Eftersom jag vill ha så portabel kod som möjligt så vill jag inte använda några andra komponenter än möjligtvis GD och helst inte skriva till filsystemet alls.
Det bästa vore att på nåt sätt skapa en variabel som innehåller binärdata för den omskalade bilden, på samma sätt som:
Ja, kan ju berätta hur jag löste detta också då...
Det slutade med att jag använde ImageCopyResized för att skala om bilden, och ImageJpeg för att skapa själva JPEG-filen, som jag helt enkelt skrev över den uppladdade bilden med, _efter_ att jag hade läst in originalet och lagt in den i databasen.
Lite omständligt alltså, men utan problem med skrivrättigheter och tredjepartsverktyg, vilket var hela nöten.
En nyfiken fråga. Varför använde du imagecopyresized() och inte imagecopyresampled()? Håller själv på att skissar på en uppladdningsfunktionför bilder och velar mellan de två funktionerna.
Vet inte egentligen, jag hade redan använt imagecopyresized() i en annan funktion jag skrev nån gång, så det blev den. Egentligen ger väl imagecopyrampled() bättre resultat, men tar lite längre tid?
Kan nån rapportera om hur det egentligen är med inbyggt stöd för imagecopyresized() och imagecopyresampled() i PHP? Kan jag använda dessa funktioner i min kod och vara lugn att det ska funka i princip varsomhelst där PHP finns eller krävs det viss version av GD osv?
Vad jag kan se i funktionsbeskrivningarna så behövs inte GD för imagecopyresized(), men däremot så behövs GD 2.0.1 eller senare för imagecopyresampled().
När det gäller hastighetsskillnaden har jag sett motstridiga kommentarer. Har inte hittat nån ordentlig jämförelse mellan de två funktionerna.
Det jag undrar mest över vad tanken med de två olika funktionerna är. Hur stor roll spelar det att imagecopyresize() inte samplar om bilden om man ändå bara är ute efter att skapa thumbnails. I funktionsbeskrivningen av imagecopyresample() talas det om att bilden behåller skärpan vid nedskalning.
Får väl vid tillfälle prova de olika funktionerna och se om det svider i ögonen närman krympt en bild med imagecopyresize(). :)
Ja, det blir mycket bättre kvalitet med imagecopyresampled(), men det var nog det där med GD som gjorde att jag valde imagecopyresized() en gång i tiden, för portabilitetens skull.
Läste att du inte ville använda tredje-partsprogram men bäst kvalité om man jämför med GD så tycker jag det är ImageMagick. Det tar lite längre tid med kvalitétskillnaden är enorm.
257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2