gemiddelde kleur
Ik zou graag de gemiddelde kleur van een afbeelding bepalen. Ik heb hier op de site een stukje code gevonden. maar wanneer ik een image ingeef krijg ik elke keer de warning:
Warning: imagesx(): supplied argument is not a valid Image resource in C:\...\average collor.php on line 5
Warning: imagesy(): supplied argument is not a valid Image resource in C:\...\average collor.php on line 6
Doe ik misschien iets fout wat ik over het hoofd zie?
code die ik gebruik:
Warning: imagesx(): supplied argument is not a valid Image resource in C:\...\average collor.php on line 5
Warning: imagesy(): supplied argument is not a valid Image resource in C:\...\average collor.php on line 6
Doe ik misschien iets fout wat ik over het hoofd zie?
code die ik gebruik:
Code (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
37
38
39
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
37
38
39
<?php
function average($img) {
$w = imagesx($img);
$h = imagesy($img);
$r = $g = $b = 0;
for($y = 0; $y < $h; $y++) {
for($x = 0; $x < $w; $x++) {
$rgb = imagecolorat($img, $x, $y);
$r += $rgb >> 16;
$g += $rgb >> 8 & 255;
$b += $rgb & 255;
}
}
$pxls = $w * $h;
$r = dechex(round($r / $pxls));
$g = dechex(round($g / $pxls));
$b = dechex(round($b / $pxls));
if(strlen($r) < 2) {
$r = 0 . $r;
}
if(strlen($g) < 2) {
$g = 0 . $g;
}
if(strlen($b) < 2) {
$b = 0 . $b;
}
return "#" . $r . $g . $b;
}
echo '<img src="http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif" />';
$average = average('http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif');
echo $average;
?>
function average($img) {
$w = imagesx($img);
$h = imagesy($img);
$r = $g = $b = 0;
for($y = 0; $y < $h; $y++) {
for($x = 0; $x < $w; $x++) {
$rgb = imagecolorat($img, $x, $y);
$r += $rgb >> 16;
$g += $rgb >> 8 & 255;
$b += $rgb & 255;
}
}
$pxls = $w * $h;
$r = dechex(round($r / $pxls));
$g = dechex(round($g / $pxls));
$b = dechex(round($b / $pxls));
if(strlen($r) < 2) {
$r = 0 . $r;
}
if(strlen($g) < 2) {
$g = 0 . $g;
}
if(strlen($b) < 2) {
$b = 0 . $b;
}
return "#" . $r . $g . $b;
}
echo '<img src="http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif" />';
$average = average('http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif');
echo $average;
?>
Probeer eens om het bestand op te vragen, deze lokaal op te slaan (file_put_contents()), en dit plaatje door te sturen naar de functie.
Gewijzigd op 10/01/2012 18:37:41 door Jacco Brandt
Quote:
imagesx() requires an image resource, not a file path. So you'd need
to use one of the imagecreatefrom* functions to create the resource.
to use one of the imagecreatefrom* functions to create the resource.
Dit kun je ook doen:
Vervang
door
Gewijzigd op 10/01/2012 19:06:06 door Jordy -
Heb je dit al eens geprobeerd met een image die lokaal staat, in plaats van op
http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif ?
http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif ?
bedankt voor de reacties. maar ik kom er niet uit. ik blijf foutmeldingen krijgen. Ik heb het geprobeerd met een local bestand, met file_put_contents(), andere plaatjes en list($w, $h, $type, $attr) = getimagesize($img); maar niets lijkt te werken.
elke keer kom ik terug bij deze melding (supplied argument is not a valid Image resourc)
iemand enig idee?
EDIT*
ik ben iets te snel geweest met mijn reactie. list($w, $h, $type, $attr) = getimagesize($img); werkt wel. maar dan krijg ik de fout melding(supplied argument is not a valid Image resourc) voor regel 9
elke keer kom ik terug bij deze melding (supplied argument is not a valid Image resourc)
iemand enig idee?
EDIT*
ik ben iets te snel geweest met mijn reactie. list($w, $h, $type, $attr) = getimagesize($img); werkt wel. maar dan krijg ik de fout melding(supplied argument is not a valid Image resourc) voor regel 9
Gewijzigd op 11/01/2012 17:15:48 door peter paul
O ja, ik zie het.
de functie average() verwacht een image resource. Jij geeft enkel de file naam (/ url).
Kijk, op deze manier werkt het wel:
Je zal dan nog een switch moeten voorzien, om de juiste extensie naar de juiste functie te sturen.
Naar 1 van deze functies:
- imagecreatefromgif
- imagecreatefromjpeg
- imagecreatefrompng
de functie average() verwacht een image resource. Jij geeft enkel de file naam (/ url).
Kijk, op deze manier werkt het wel:
Je zal dan nog een switch moeten voorzien, om de juiste extensie naar de juiste functie te sturen.
Naar 1 van deze functies:
- imagecreatefromgif
- imagecreatefromjpeg
- imagecreatefrompng
Gewijzigd op 11/01/2012 17:40:32 door Kris Peeters
Ik ben nou het een en ander aan het proberen met classes. maar het lijkt niet te lukken. de functie die ik in mijn aller eerste post heb staan werkt gewoon goed. nou wilde ik alleen de kleuren scheiden. ik heb dit met de volgende code geprobeerd. alleen ik krijg niets te zien.
Hij echot:
Code (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
37
38
39
40
41
42
43
44
45
46
47
48
49
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
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
class average_color {
public $red;
public $green;
public $blue;
public function ___construct($img) {
$w = imagesx($img);
$h = imagesy($img);
$r = $g = $b = 0;
for($y = 0; $y < $h; $y++) {
for($x = 0; $x < $w; $x++) {
$rgb = imagecolorat($img, $x, $y);
$r += $rgb >> 16;
$g += $rgb >> 8 & 255;
$b += $rgb & 255;
}
}
$pxls = $w * $h;
$r = dechex(round($r / $pxls));
$g = dechex(round($g / $pxls));
$b = dechex(round($b / $pxls));
if(strlen($r) < 2) {
$r = 0 . $r;
}
if(strlen($g) < 2) {
$g = 0 . $g;
}
if(strlen($b) < 2) {
$b = 0 . $b;
}
$this->red = $r;
$this->green = $g;
$this->blue = $b;
}
}
$img = imagecreatefromgif('http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif');
$average = new average_color($image);
echo 'R= ' . $average->red;
echo ' G= ' . $average->green;
echo ' B= ' . $average->blue;
?>
class average_color {
public $red;
public $green;
public $blue;
public function ___construct($img) {
$w = imagesx($img);
$h = imagesy($img);
$r = $g = $b = 0;
for($y = 0; $y < $h; $y++) {
for($x = 0; $x < $w; $x++) {
$rgb = imagecolorat($img, $x, $y);
$r += $rgb >> 16;
$g += $rgb >> 8 & 255;
$b += $rgb & 255;
}
}
$pxls = $w * $h;
$r = dechex(round($r / $pxls));
$g = dechex(round($g / $pxls));
$b = dechex(round($b / $pxls));
if(strlen($r) < 2) {
$r = 0 . $r;
}
if(strlen($g) < 2) {
$g = 0 . $g;
}
if(strlen($b) < 2) {
$b = 0 . $b;
}
$this->red = $r;
$this->green = $g;
$this->blue = $b;
}
}
$img = imagecreatefromgif('http://www.google.nl/intl/nl_ALL/images/logos/images_logo_lg.gif');
$average = new average_color($image);
echo 'R= ' . $average->red;
echo ' G= ' . $average->green;
echo ' B= ' . $average->blue;
?>
Hij echot:
En als je van dit:
$r = 0 . $r;
nu eens dit maakt:
$r = "0" . $r;
(en hetzelfde bij g en b).
$r = 0 . $r;
nu eens dit maakt:
$r = "0" . $r;
(en hetzelfde bij g en b).
dat is inderdaad ook een fout die ik heb gemaakt. maar na het veranderd te hebben verandered er niets in wat hij echot.
EDIT
@ Erwin H
de functie deed het wel voor dat ik er een class van probeerde te maken. toch heb ik je raad opgevolgt maar de echo blijft het zelfde.
EDIT 2
ik ben er uit ik heb 3 underscores and dat moeten er twee zijn bij __construct
EDIT
@ Erwin H
de functie deed het wel voor dat ik er een class van probeerde te maken. toch heb ik je raad opgevolgt maar de echo blijft het zelfde.
EDIT 2
ik ben er uit ik heb 3 underscores and dat moeten er twee zijn bij __construct
Gewijzigd op 16/01/2012 12:54:48 door koh do




