[PHP] Mooie oplossing voor image-resizing

Pagina: 1
Acties:
  • 123 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Hey mensen!

Ik heb een tijdje terug al een post gedaan over het traag laden van een pagina, dit kwam uiteindelijk door de functie getimagesize() van PHP.
Deze functie gebruikte ik om de width en height van een plaatje op te halen, zodat ik de verhouding tussen width en height kon vaststellen en dus het plaatje kon verkleinen (thumbnail) met de originele verhouding.
Als alternatief (omdat het zo traag is) heb ik een vaste width (200px) opgegeven en de height herschaalt dan respectievelijk aan de width.
Dit werkt allemaal leuk en aardig, maar als je een plaatje hebt die klein is (bijvoorbeeld een spacer van 1x1 px of een leuk Digg this plaatje Afbeeldingslocatie: http://feeds.treehugger.com/~f/treehuggersite?i=XuPAeY7D) dan worden die veeel te groot...
En bij zo'n spacer (bijvoorbeeld de feed van tweakers.net komt dat voor) dan krijg je een groot stuk witruimte.

Ik heb al veel na zitten denken over hoe ik dit het beste kan oplossen, maar ik denk dat ik jullie hulp nodig heb voor dit probleem.

In ieder geval alvast bedankt voor het meedenken!

Acties:
  • 0 Henk 'm!

  • FlorisB
  • Registratie: Augustus 2004
  • Laatst online: 09:56
De image size in een cache opslaan? Dan hoef je niet 1000x getimagesize per pageview op te roepen? :)

Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

is het dan niet slimmer om al die thumbnails in 1x te maken?
Edit: bij het uploaden dus

[ Voor 18% gewijzigd door sanzut op 29-05-2007 10:58 ]


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 17:41
Dus je resized je plaatjes pas op het moment dat iemand een pagina opvraagt? En dan bij elke request weer? Dat is toch niet handig? Je kan toch beter je plaatjes resizen als ze geupload worden?

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Ze worden niet geupload, ik haal ze uit RSS feeds ;)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
FaNtJuH schreef op donderdag 10 mei 2007 @ 23:23:
Zijn inderdaad leuke oplossingen, maar zoals ik het nu heb is het ook prima! In ieder geval bedankt! :)
Blijkbaar is het nu dus niet prima => bekijk de suggesties vanaf Gomez12 in "[PHP] html_entity_decode traag" dan nog eens. Nofi, maar als je dat nou 3 weken geleden serieus op had gepakt, hoefde je niet nu met dit probleem te zitten. ;)

edit:
En nu dus weer 3 mensen die binnen enkele minuten met de goede oplossing komen, hoe vaak wil je het nog horen? :>
FaNtJuH schreef op dinsdag 29 mei 2007 @ 10:59:
Ze worden niet geupload, ik haal ze uit RSS feeds ;)
Dat verhindert het opslaan van wat meta informatie nog niet.

[ Voor 26% gewijzigd door Voutloos op 29-05-2007 11:00 ]

{signature}


Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
Ik heb hier zelf nooit last van gehad, maar misschien kun je anders de imgsize in een database bijhouden?
iets in de riching van:
code:
1
2
3
4
5
6
if (grootte plaatje staat in database){
    haal uit database
} else {
    bepaal grootte met getimgsize();
    zet grootte in database
}

[ Voor 5% gewijzigd door martijnve op 29-05-2007 11:01 ]

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Voutloos schreef op dinsdag 29 mei 2007 @ 10:59:
[...]

Blijkbaar is het nu dus niet prima => bekijk de suggesties vanaf Gomez12 in "[PHP] html_entity_decode traag" dan nog eens. Nofi, maar als je dat nou 3 weken geleden serieus op had gepakt, hoefde je niet nu met dit probleem te zitten. ;)
De oplossing klinkt goed, maar kan dit ook werken als er geen plaatjes worden geupload maar uit feeds worden gehaald? Zo ja, ik vind zijn uitleg nogal beknopt, kun je dit dan iets duidelijker verwoorden? :)

Acties:
  • 0 Henk 'm!

  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 16-09 09:35
FaNtJuH schreef op dinsdag 29 mei 2007 @ 10:59:
Ze worden niet geupload, ik haal ze uit RSS feeds ;)
oplossing lijkt me simpel

je haalt het plaatje op
je kijkt of er al een kleine versie op je server staat

zo ja > weergeven
zo nee > alsnog verkleinen en weergeven

Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
martijnve schreef op dinsdag 29 mei 2007 @ 11:00:
Ik heb hier zelf nooit last van gehad, maar misschien kun je anders de imgsize in een database bijhouden?
iets in de riching van:
code:
1
2
3
4
5
6
if (grootte plaatje staat in database){
    haal uit database
} else {
    bepaal grootte met getimgsize();
    zet grootte in database
}
Dat zou wel een oplossing kunnen zijn ja, dat is een soort van caching toch?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
FaNtJuH schreef op dinsdag 29 mei 2007 @ 11:01:
[...]
De oplossing klinkt goed, maar kan dit ook werken als er geen plaatjes worden geupload maar uit feeds worden gehaald? Zo ja, ik vind zijn uitleg nogal beknopt, kun je dit dan iets duidelijker verwoorden? :)
Nee, want ik krijg dus niet de indruk dat je er echt mee bezig bent geweest. Anders had je dit topic moeten starten (of in dat andere topic door moeten gaan :P ) met de vraag om je te helpen bij het uitwerken van deze suggestie omdat je op een bepaald punt vast loopt.

{signature}


Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

FaNtJuH schreef op dinsdag 29 mei 2007 @ 10:59:
Ze worden niet geupload, ik haal ze uit RSS feeds ;)
Dan kan je mssn beter een cronjob laten lopen, bijv elke paar minuten, die adhv filename oid kijkt of je a) dat bestand al in de db hebt staan b) je hier al een thumbnail van hebt.
De Thumbnail opslaan op je eigen server, linken naar het grote plaatje.
Zodra het plaatje uit de feed is/of na een vaste tijd, de thumbnail weer verwijderen?

Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Voutloos schreef op dinsdag 29 mei 2007 @ 11:03:
[...]
Nee, want ik krijg dus niet de indruk dat je er echt mee bezig bent geweest. Anders had je dit topic moeten starten (of in dat andere topic door moeten gaan :P ) met de vraag om je te helpen bij het uitwerken van deze suggestie omdat je op een bepaald punt vast loopt.
Omdat ik dacht dat het met de oplossing die ik in de TS noemde wel goed ging...
sanzut schreef op dinsdag 29 mei 2007 @ 11:03:
[...]

Dan kan je mssn beter een cronjob laten lopen, bijv elke paar minuten, die adhv filename oid kijkt of je a) dat bestand al in de db hebt staan b) je hier al een thumbnail van hebt.
De Thumbnail opslaan op je eigen server, linken naar het grote plaatje.
Zodra het plaatje uit de feed is/of na een vaste tijd, de thumbnail weer verwijderen?
Als ik zo'n oplossing zou gebruiken zou ik gewoon de width en height in de HTML veranderen en niet verkleinde plaatjes op mijn webserver opslaan ;)

[ Voor 27% gewijzigd door plofkip op 29-05-2007 11:06 ]


Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
FaNtJuH schreef op dinsdag 29 mei 2007 @ 11:02:
[...]

Dat zou wel een oplossing kunnen zijn ja, dat is een soort van caching toch?
Je kunt er elk label op plakken wat je wil,

Aangezien je dus zelf geen kennis hebt over welke plaatjes je gaat gebruiken moet het bijhouden van de gevraagde images dus automatisch gebeuren, en aangezien je moeilijk het hele internet kunt indexeren ( 8) ) lijkt dit me de handigste oplossing.

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Ik denk dat ik het beste deze manier kan doen, simpel en doeltreffend:
code:
1
2
3
4
5
6
if (grootte plaatje staat in database){
    haal uit database
} else {
    bepaal grootte met getimgsize();
    zet grootte in database
}

Tenzij iemand problemen ziet die ik tegen gá komen?

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
FaNtJuH schreef op dinsdag 29 mei 2007 @ 11:14:
Ik denk dat ik het beste deze manier kan doen, simpel en doeltreffend:
code:
1
2
3
4
5
6
if (grootte plaatje staat in database){
    haal uit database
} else {
    bepaal grootte met getimgsize();
    zet grootte in database
}

Tenzij iemand problemen ziet die ik tegen gá komen?
ik zou het niet in een DB doen, maar gewoon als file, (dus niet als blob) verder neem ik aan dat je met 'grote plaatje' de geresizede afbeelding bedoelt?

dan is dat idd de standaard oplossing

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
BasieP schreef op dinsdag 29 mei 2007 @ 11:17:
[...]

ik zou het niet in een DB doen, maar gewoon als file, (dus niet als blob) verder neem ik aan dat je met 'grote plaatje' de geresizede afbeelding bedoelt?

dan is dat idd de standaard oplossing
Waarom niet in een DB maar een file? En wat is blob?

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 19:08

BCC

BasieP schreef op dinsdag 29 mei 2007 @ 11:17:
[...]

ik zou het niet in een DB doen, maar gewoon als file, (dus niet als blob) verder neem ik aan dat je met 'grote plaatje' de geresizede afbeelding bedoelt?

dan is dat idd de standaard oplossing
Een plaatje kan inderdaad veel beter door Apache geserveerd worden, want dat is vele malen sneller dan Request -> Apache -> PHP -> MySQL -> PHP -> Apache -> File.

En blob is een Binary Large OBject. Oftewel een veld in je database om bestanden in de proppen.

[ Voor 11% gewijzigd door BCC op 29-05-2007 11:29 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

BasieP schreef op dinsdag 29 mei 2007 @ 11:17:
[...]

ik zou het niet in een DB doen, maar gewoon als file, (dus niet als blob) verder neem ik aan dat je met 'grote plaatje' de geresizede afbeelding bedoelt?

dan is dat idd de standaard oplossing
Het plaatje als file, en de grootte in de database. Niet allebei in de database.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

BCC schreef op dinsdag 29 mei 2007 @ 11:29:
[...]

Een plaatje kan inderdaad veel beter door Apache geserveerd worden, want dat is vele malen sneller dan Request -> Apache -> PHP -> MySQL -> PHP -> Apache -> File.

En blob is een Binary Large OBject. Oftewel een veld in je database om bestanden in de proppen.
Hij wil slechts de grootte (dimensions) van het plaatje opslaan in de DB, niet het hele plaatje :)

Edit: Spuit11 :P

PHP is toch niet clientside btw?

[ Voor 5% gewijzigd door Verwijderd op 29-05-2007 11:43 ]


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 19:08

BCC

Oh.. dat had ik ff niet door.. my bad!

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Het is precies zoals Arcanedevil zegt ;) Dan ga ik deze methode maar eens proberen :D Bedankt in ieder geval!

Acties:
  • 0 Henk 'm!

  • Mei
  • Registratie: Juni 2005
  • Laatst online: 17-10-2024

Mei

En dan wel met CSS resizen he ;)

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Moven naar Programming

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

FaNtJuH schreef op dinsdag 29 mei 2007 @ 10:54:

Dit werkt allemaal leuk en aardig, maar als je een plaatje hebt die klein is (bijvoorbeeld een spacer van 1x1 px of een leuk Digg this plaatje [afbeelding]) dan worden die veeel te groot...
Volgens mij heeft hij het over dit probleem, terwijl niemand daar op in gaat.. Dit is heel eenvoudig op te lossen door als de oude width (die je toch al opvraagt) kleiner is dan de resize-to width de orginele width te gebruiken.

Verder over het cach-idee: van elk image een hash code berekenen, die hash code in een DB opslaan en de bijpassende id als image in het file systeem lijkt mij het netst.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

pietje63 schreef op dinsdag 29 mei 2007 @ 11:59:
Verder over het cach-idee: van elk image een hash code berekenen, die hash code in een DB opslaan en de bijpassende id als image in het file systeem lijkt mij het netst.
Waarom een hash berekenen? filename is toch ook voldoende, sterker nog een filename is "unieker" dan een hash :)
BCC schreef op dinsdag 29 mei 2007 @ 11:29:
Een plaatje kan inderdaad veel beter door Apache geserveerd worden, want dat is vele malen sneller dan Request -> Apache -> PHP -> MySQL -> PHP -> Apache -> File.
offtopic:
Altijd leuk dit soort dingen :o

Request -> Apache -> PHP -> MySQL (mysql cache en filesystem cache) -> PHP -> Apache -> File
Request -> Apache -> PHP -> Filesystem (filesystem cache) -> PHP -> Apache -> File.

Opslaan in de database kan juist een performace winst zijn

Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
pietje63 schreef op dinsdag 29 mei 2007 @ 11:59:
[...]
Verder over het cach-idee: van elk image een hash code berekenen, die hash code in een DB opslaan en de bijpassende id als image in het file systeem lijkt mij het netst.
Waarom niet gewoon de URL met width en height?

edit:
Post hierboven nog niet gelezen :P

edit:
Nr2. Het werkt super met die database :D Thanks allemaal!!!

[ Voor 16% gewijzigd door plofkip op 29-05-2007 12:59 ]


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Omdat een online plaatje kan veranderen. Als je RSS bestanden binnen haalt waar niet al te veel veranderd is, dus waar in feite 2x hetzelfde plaatje in staat. OF 2x een andere plaatje met dezelfde naam.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

pietje63 schreef op dinsdag 29 mei 2007 @ 15:23:
Omdat een online plaatje kan veranderen. Als je RSS bestanden binnen haalt waar niet al te veel veranderd is, dus waar in feite 2x hetzelfde plaatje in staat. OF 2x een andere plaatje met dezelfde naam.
Dat is gewoon een kwestie van je cache up-to-date houden. Als iets veranderd is dan zie je dat immers in die RSS feed waardoor je je cache moet clearen. Plaatjes met dezelfde naam kunnen niet voorkomen op je filesystem, die maak je dus uniek.

Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
FaNtJuH schreef op dinsdag 29 mei 2007 @ 10:54:
Hey mensen!

Ik heb een tijdje terug al een post gedaan over het traag laden van een pagina, dit kwam uiteindelijk door de functie getimagesize() van PHP.
Als je het pagina script scheid van het thumbnail script dus in je html iets van:
HTML:
1
[img src="thumbnail.php?pic=plaatje.jpg"]

Dan gebruikt de browser van de bezoeker meerdere threads om de plaatjes op te halen, en hoeven deze niet op elkaar te wachten...

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

djexplo schreef op dinsdag 29 mei 2007 @ 15:49:
Als je het pagina script scheid van het thumbnail script dus in je html iets van:
HTML:
1
[img src="thumbnail.php?pic=plaatje.jpg"]
doorgaands moet je dat sowieso doen aangezien je geen plaatjes in je html stream wilt sturen ;)
Dan gebruikt de browser van de bezoeker meerdere threads om de plaatjes op te halen, en hoeven deze niet op elkaar te wachten...
totdat je php-sessions gaat gebruiken, maargoed dat is te offtopic

Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Nou ik vind het goed zoals het nu is :) Bedankt mensen!
Pagina: 1