gemiddelde kleur
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;
?>
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 -
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
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
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:
$r = 0 . $r;
nu eens dit maakt:
$r = "0" . $r;
(en hetzelfde bij g en b).
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