Någon som vill visa altenativ på hur profilbilder med php funkar?

Permalänk
Avstängd

Någon som vill visa altenativ på hur profilbilder med php funkar?

Hej. Jag har hört att man kan lägga själva bildkoden i databasen. Typ /Minabilder/profilbilder/bild.jpg
Är det sant?

Hur fungerar det om en bild heter 1.jpg och en använder laddar upp 1.jpg ? Raderas första 1.jpg och ersätts med nya
1.jpg?

Visa signatur
Permalänk
Inaktiv

Saker fungerar inte tvunget på ett visst sätt. Det beror helt på hur du kodar ihop det. När en användare laddar upp en bild kan du tex. döpa bilden till en MD5-hash av användarens användarnamn vilket löser kollisioner. Du kan även lagra bilden direkt i MySQL (är väl knappast optimalt dock) eller som du säger en sökväg till bilden.

Det finns även andra alternativ, tex. att man använder sig av Gravatar eller bara tillåter användare att länka till bilder.

Permalänk
Medlem

Du kan spara alla användares bilder i separata mappar, och istället för att behålla det ursprungliga namnet som IMG1337.JPG så döper du om det till exemelvis time().jpg (alltså timestampen då bilden laddades upp) eller ett indexnummer som du ökar för varje ny bild, så att det blir 0001.jpg, 0002.jpg osv oavsett vad bilden som användaren laddade upp hette.

Sedan känner du säkert till PHP-biblioteket GD som du använder för att skala ner stora bilder så de inte går åt så mycket bandbredd för att ladda ner dem.

Permalänk
Avstängd
Skrivet av jetten:

Du kan spara alla användares bilder i separata mappar, och istället för att behålla det ursprungliga namnet som IMG1337.JPG så döper du om det till exemelvis time().jpg (alltså timestampen då bilden laddades upp) eller ett indexnummer som du ökar för varje ny bild, så att det blir 0001.jpg, 0002.jpg osv oavsett vad bilden som användaren laddade upp hette.

Sedan känner du säkert till PHP-biblioteket GD som du använder för att skala ner stora bilder så de inte går åt så mycket bandbredd för att ladda ner dem.

Känner inte till biblioteket, berättar gärna för mig.

Visa signatur
Permalänk
Medlem
Skrivet av angryencoder:

Känner inte till biblioteket, berättar gärna för mig.

Här står allt du behöver veta. http://php.net/manual/en/book.image.php
GD är inte påslaget per default så du måste kolla in Installation-sidan. Sedan kan du använda getimagesize() för att få reda på proportionerna på bilden. Om funktionen t.ex. returnerar width=640, height=480 och du eftersträvar en bredd på 300px, så kan du då beräkna bildens nya mått:

$gammalBredd = 640; // Fås ur getimagesize("0001.jpg")[0] $gammalHöjd = 480; // Fås ur getimagesize("0001.jpg")[1] $nyBredd = 300; $skalningsfaktor = $gammalBredd/$nyBredd; // 640/300 = 2,13333 $nyHöjd = $gammalHöjd / $skalningsfaktor; // 480/2,13333 = 225 // Bildens nya proportioner: width=300, height = 225

Nåja, där fick du en lektion i att bevara bildens proportioner, vilket tyvärr många verkar missa/strunta i. Och då blir bilderna snabbt fula. Sedan ska du då spara dem till en ny JPEG med nån GD-funktion.

Så, först tar du reda på om det är en JPEG, PNG eller GIF-bild. Sedan använder du imagecreatefromjpeg(), imagecreatefrompng() eller imagecreatefromgif() för att öppna bilden. getimagesize() för att ta reda på bildens storlek och beräkna den nya upplösningen enligt ovan, imagescale() för att ändra upplösning. Sedan är det bara att spara den nya bilden med imagejpeg().

Permalänk
Medlem

Jao, det är ganska viktigt att avatarerna får olika namn varje gång en person byter, så att bara köra en MD5 hash på en persons användarnamn fungerar inte så bra, byter personen då bild och får samma hash för bildnamnet så kommer den gamla bilden troligen att vara cashad i pesonens webbläsare, krävs en hard refresh för att byta, likaså om man har andras avatarer cachade och dom byter.

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Jao, det är ganska viktigt att avatarerna får olika namn varje gång en person byter, så att bara köra en MD5 hash på en persons användarnamn fungerar inte så bra, byter personen då bild och får samma hash för bildnamnet så kommer den gamla bilden troligen att vara cashad i pesonens webbläsare, krävs en hard refresh för att byta, likaså om man har andras avatarer cachade och dom byter.

Vilket är varför mappar (självklart då med bildkomprimering som nämnts tidigare) är att föredra. Dock kan du ju ändå använda en MD5 av användarnamnet om du sedan kombinerar det med indexering, dvs bilderna blir: md5hash_0001.jpg, md5hash_0002.jpg osv.

Jag personligen skulle dock rekommendera att du, som tidigare nämnts, skapar mappar efter användare, så om du har en registrering, vilket ju verkar troligt, kan man redan då skapa filstrukturen om man vill. Sen är det upp till dig om du vill att mappen ska heta username/images/profile, eller om du vill hasha användarnamnet. Personligen hashar jag i stort sett allt av vana, det kanske inte är nödvändigt, men det skadar inte. (dvs vid registrering så hämtar man innehållet i fältet username, hashar och skapar sen en mapp med mkdir t ex)

Visa signatur

Citera för svar!|Fraktfritt hos INET|Min hemsida
Fractal Design Define R3|Corsair AX 850W|Gigabyte Nvidia GeForce GTX 570|Corsair Vengeance 1600MHz 2x4GB|ASRock P67 Extreme4|Intel Core i5 2500K|2x Samsung Spinpoint F3 1TB|Samsung Blu-Ray läsare
Nikon D7000|Nikon 60mm macro|Nikon 18-70|Nikon 55-300|Nikon 10.5 Fisheye