Afbeelding pixel voor pixel uit db kunnen lezen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter de Graaf

Peter de Graaf

24/10/2012 13:39:06
Quote Anchor link
Ik zoek een effectieve manier om een jpg afbeelding pixel voor pixel uit een database te kunnen lezen. Er moet dus een actie vooraf plaatsvinden om er voor te zorgen dat er weer pixels zichtbaar worden.

Op dit moment is het mij gelukt om de x en y coordinaten + de kleurcode van een afbeelding in een database te zetten (via ImageMagick). Een afbeelding van 150x150 is dus 22500 records. Een extra kolom geeft aan of de pixel wel/niet zichtbaar is. Via een button kan ik steeds 1 pixel zichtbaar maken. De pixels worden in divjes gezet. Zeker niet efficient maar ik ben al blij dat ik dit werkend heb gekregen. Zolang er weinig pixels zichtbaar zijn, laadt de pagina snel. Maar zodra het aantal pixels en dus divjes richting de 22500 gaat, wordt het allemaal erg traag.

Vandaar dat ik andere mogelijkheden aan het bekijken ben. Ik ben geen grote ster met PHP maar heb eea gelezen over imagesetpixel en imagecreatefromjpg. Alleen krijg ik dit niet werkend en weet ik ook niet of dit hetgeen is wat ik kan gebruiken.

Ik hoop dat jullie me een zetje in de juiste richting kunnen geven.
 
PHP hulp

PHP hulp

03/12/2024 18:13:23
 
Rick van Riel

Rick van Riel

24/10/2012 13:42:20
Quote Anchor link
Waarom wil je een plaatje pixel voor pixel uit een database lezen? Misschien als je vertelt waarvoor je het doet dat we je wat meer kunnen helpen.
 
Peter de Graaf

Peter de Graaf

24/10/2012 13:44:27
Quote Anchor link
Is voor een raadspelletje. Iemand moet wat doen om een pixel zichtbaar te krijgen. Hoe meer pixels er zichtbaar zijn, des te duidelijk wordt de afbeelding.
 
Bart V B

Bart V B

24/10/2012 13:46:53
Quote Anchor link
Op zich al knap om 22500 records uit te laten poepen via php zonder dat er een time out optreed.
Maar zoals Rick al aangeeft wat is de bedoeling ervan?
Kan me niet voorstellen dat dit in een dagelijkse applicatie nodig is.

Kan je niet beter kijken naar een javascript oplossing? Of misschien nog beter, een html5 canvas oplossing?
Dat lijkt me efficiënter werken dan dit stuk theorie wat je nu ons verteld...
 
Rick van Riel

Rick van Riel

24/10/2012 13:47:33
Quote Anchor link
Iemand moet dus 22500 keer iets doen om het hele plaatje te zien? Ik zou zeggen doe dit niet per pixel maar slice het plaatje in een opgeefbaar aantal stukjes. Dan kun je ervoor zorgen dat het spelletje snel blijft en zelf bepalen hoeveel stukjes er zijn.
 
Peter de Graaf

Peter de Graaf

24/10/2012 13:51:10
Quote Anchor link
Dank voor jullie meedenken. Concept blijft zoals het is (per pixel) en ik zou graag weten hoe dit efficient kan. Aantal pixels wat zichtbaar wordt is niet altijd 1 maar kan ook 15 of 20 zijn.

Ik heb zelf ook al aan het canvas gebeuren gedacht maar wist niet zeker of het daar wel mee kan. Dat is dus een goede mogelijkheid?
 
Rick van Riel

Rick van Riel

24/10/2012 13:54:33
Quote Anchor link
Het probleem is dat je dan 22500 pixel uit de database moet halen en elke pixel staat voor 1 record. Als ik uit een database 22500 records moet halen zal dit nooit snel gaan. Het is namelijk veel data dat verwerkt moet worden. Ik raad je daarom toch aan om hier iets anders op te vinden.
 
Bart V B

Bart V B

24/10/2012 13:54:50
Quote Anchor link
Met canvas en een beetje javascript denk ik wel.
Kan zo snel geen voorbeeld vinden, maar denk dat dit al een stuk efficiënter en sneller is.
Hoewel je natuurlijk wel met de verschillende browsers zit. Weet niet of elke browser het zal weergeven.

EDIT niet pixel voor pixel uit een database gaan doen.
Dat is veel te traag. Je moet de plaatjes laten faden, slicen.
Gewijzigd op 24/10/2012 13:56:21 door Bart V B
 
Peter de Graaf

Peter de Graaf

24/10/2012 13:57:24
Quote Anchor link
Ik ga eens naar html5 kijken.

Met faden, slicen bedoel je in grotere brokken laten laden?
Gewijzigd op 24/10/2012 13:58:28 door Peter de Graaf
 
De VeeWee

de VeeWee

24/10/2012 14:07:28
Quote Anchor link
Ik zou in de database opslaan: x,y,w,h. Op deze manier kan je met vlakken werken, wat op zich al wel een pak sneller zal zijn. 1px zegt namelijk niets over een afbeelding, omdat je er 22500 hebt. Die ingreep verkleint het aantal data al aanzienlijk.

Dan zou ik werken met een cron, die elke minuut een nieuwe volledige afbeelding aanmaakt. Daardoor leg je de wachttijd op de server en niet bij uw bezoekers. De bezoeker moet slechts 1 afbeelding laden, die opgeslagen staat op de server. Ook de time-out problemen zijn dan van de baan.

In die cron laat je dus de gd library gewoon de afbeelding inladen. Je berekent de vlakken die niet zichtbaar zijn, en die overschrijf je gewoon met een kleur. Die afbeelding kan je dan opslaan onder de naam 'raadsel2_aantalrecords.jpg'. Hierdoor weet je of de cron een nieuwe afbeelding moet laden of niet.

In het administratieve gedeelte kan je dan met een canvas werken om gewoon de zichtbare vlakken te tekenen.
 
Kris Peeters

Kris Peeters

24/10/2012 14:11:09
Quote Anchor link
(Ondertussen zijn er nog wat berichten bijgekomen)

Grappige vraag.
Ja, dat moet allemaal lukken.

Tegenwoordig heeft javascript veel meer (dan niet zo lang geleden) mogelijkheden om images te lezen. Het moet mogelijk zijn om dit locaal te doen. Eventueel kan je dan met <canvas> verder doen.

Maar mijn oplossing zou toch vooral zijn om de rekenkracht asynchroon te laten werken.
Dus, je laat Ajax ofwel een web worker de regie nemen.
Je kan dan asynchroon delen van de image laten berekenen.

Het duurt nog steeds de tijd die nodig is, maar als gebruiker heb je er veel minder last van.
En je kan in real time de image zien opgebouwd worden.
 
Michel Falke

Michel Falke

24/10/2012 14:58:24
Quote Anchor link
Indien je bij PHP wilt blijven kun je ook 1 record per plaatje gaan genereren. Bouw een array die voor jou specifieke situatie werkt. Serialize deze base64 encode erover heen en dan opslaan in de database. Dan zou je met een paar methode's kunnen filteren in de array.
 
Peter de Graaf

Peter de Graaf

24/10/2012 17:54:35
Quote Anchor link
Leuk om de verschillende benaderingen te lezen. Bedankt hiervoor. Ik ga kijken wat voor mij de meest handige oplossing is.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.