Is het mogelijk het histogram zoals je dat zo mooi ziet als je op het 'info'-knopje drukt direct naar de computer te downloaden? Of moet je dit met de 'hand' berekenen aan de hand van de foto als je dat wilt hebben?
Neesjroorda schreef op 11 december 2002 @ 21:33:
Is het mogelijk het histogram zoals je dat zo mooi ziet als je op het 'info'-knopje drukt direct naar de computer te downloaden?
NeeOf moet je dit met de 'hand' berekenen aan de hand van de foto als je dat wilt hebben?
Een beetje beeldbewerkingsprogramma heeft een histogram functie ingebouwd, deze wordt dan wel opnieuw berekend, de histogram zit niet los bij de foto.
Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.
Sorry, misschien had ik het doel erbij moeten noemen: heb een db'tje (PHP+MySQL) waarin ik mijn eigen fotoboek bijhoud, en zoiets lijkt me ook leuk om erbij te hebben. Ik zal het ongetwijfeld ook wel zelf kunnen proggen, maar als er standaard manieren bestaan is dat natuurlijk mooi meegenomenJohnny64 schreef op 11 december 2002 @ 22:16:
Nee
Een beetje beeldbewerkingsprogramma heeft een histogram functie ingebouwd, deze wordt dan wel opnieuw berekend, de histogram zit niet los bij de foto.
Lijkt me wel handig..mocht je iets vinden/maken, post het ook hier dan even
Arrived anxious, left bored
het histogram telt toch alleen hoeveel pixels binnen een bepaald "intensiteits-interval" liggen? Wanneer je dus met GD-lib pixel-waarden kan uitlezen, zou je het zelf kunnen maken?
Dat is zeker waar; iets waar ik ook niet direct voor terugdeins (dus PuCK, hou het topic in de gatenT.T. schreef op 11 december 2002 @ 22:57:
het histogram telt toch alleen hoeveel pixels binnen een bepaald "intensiteits-interval" liggen? Wanneer je dus met GD-lib pixel-waarden kan uitlezen, zou je het zelf kunnen maken?
PuCK (en natuurlijk alle anderen die hier iets aan hebben): mijn eigen code is af... Deze code (PHP-code, want ik gebruik hem in mijn online fotoboek) maakt een afbeelding van 255 pixels breed, waarin de frequentie van de intensiteiten staan. Zie voor uitleg van de code onderaan.
r. 2: Ik begin met het inlezen van een afbeelding; dit kan je natuurlijk overslaan als je al met een afbeelding bezig bent waar je het histogram van wilt hebben (let er dan op dat wellicht de variabele $img een andere naam heeft).
r. 5: Initieer een lege intensiteiten-array.
r. 8: Ga elke pixel van de afbeelding af, haal de rood-, groen- en blauwcomponenten uit die pixel, bereken het gemiddelde van deze drie (tenminste, ik ga ervan uit dat ik zo de intensiteit goed bereken; de plaatjes lijken wel op die in Photoshop), en update het histogram met deze waarde.
r. 19: Maak een nieuwe afbeelding aan voor het histogram, initieer een paar leuke kleurtjes en maak een leuk randje
r. 27: Schaal het histogram tot je een maximum van 100 hebt (bereken de schaalfactor en schaal alle totalen).
r. 32: Schrijf afbeelding naar de schijf (je kan hem natuurlijk ook direct uitvoeren naar de browser, of een ander type afbeelding van maken).
r. 35: Verwijder de gebruikte afbeeldingen uit het geheugen.
Een opmerking bij deze code: als je een foto hebt met een (zeer) groot gedeelte van een bepaalde intensiteit, bijvoorbeeld zwart of wit (onder- dan wel overbelichte foto's), dan wordt deze hoge intensiteit naar 100 geschaald, en zal de rest geheel of gedeeltelijk wegvallen. Een oplossing hiervoor is schalen naar gemiddelde of zo (ik geloof dat Photoshop zoiets doen), maar dat is voor eigen creativiteit
.
Voorbeeld van wat er uit kan komen (een te donkere, dus vertekende, en een goede):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| // Afbeelding inladen $img = imagecreatefromjpeg("afbeelding.jpg"); // Lege histogram-array laden $hist = array_fill(0, 255, 0); // Afbeelding aflopen en intensiteiten berekenen for ($y = 0; $y < imagesy($img); $y++) for ($x = 0; $x < imagesx($img); $x++) { $rgb = imagecolorat($img, $x, $y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $index = ($r + $g + $b) / 3; $hist[$index]++; } $histogram = imagecreate(258, 103); $bordercolor = imagecolorallocate($histogram, 0, 0, 0); $bgcolor = imagecolorallocate($histogram, 100, 100, 100); $graphcolor = imagecolorallocate($histogram, 255, 255, 255); imagefill($histogram, 0, 0, $bgcolor); imagerectangle($histogram, 0, 0, 257, 102, $bordercolor); $max = max($hist); $factor = 100 / $max; for ($i = 0; $i < count($hist); $i++) imageline($histogram, $i + 1, 101, $i + 1, 101 - round($hist[$i] * $factor), $graphcolor); imagepng($histogram, "histogram.png"); // Afbeeldingen uit geheugen verwijderen imagedestroy($img); imagedestroy($histogram); |
r. 2: Ik begin met het inlezen van een afbeelding; dit kan je natuurlijk overslaan als je al met een afbeelding bezig bent waar je het histogram van wilt hebben (let er dan op dat wellicht de variabele $img een andere naam heeft).
r. 5: Initieer een lege intensiteiten-array.
r. 8: Ga elke pixel van de afbeelding af, haal de rood-, groen- en blauwcomponenten uit die pixel, bereken het gemiddelde van deze drie (tenminste, ik ga ervan uit dat ik zo de intensiteit goed bereken; de plaatjes lijken wel op die in Photoshop), en update het histogram met deze waarde.
r. 19: Maak een nieuwe afbeelding aan voor het histogram, initieer een paar leuke kleurtjes en maak een leuk randje
r. 27: Schaal het histogram tot je een maximum van 100 hebt (bereken de schaalfactor en schaal alle totalen).
r. 32: Schrijf afbeelding naar de schijf (je kan hem natuurlijk ook direct uitvoeren naar de browser, of een ander type afbeelding van maken).
r. 35: Verwijder de gebruikte afbeeldingen uit het geheugen.
Een opmerking bij deze code: als je een foto hebt met een (zeer) groot gedeelte van een bepaalde intensiteit, bijvoorbeeld zwart of wit (onder- dan wel overbelichte foto's), dan wordt deze hoge intensiteit naar 100 geschaald, en zal de rest geheel of gedeeltelijk wegvallen. Een oplossing hiervoor is schalen naar gemiddelde of zo (ik geloof dat Photoshop zoiets doen), maar dat is voor eigen creativiteit
Voorbeeld van wat er uit kan komen (een te donkere, dus vertekende, en een goede):


Pagina: 1