Versio

gemiddelde kleur

Overzicht Reageren

Peter  paul

peter paul

10/01/2012 18:35:03
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;

?>
 
PHP hulp

PHP hulp

24/05/2012 19:40:06
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Jacco Brandt

Jacco Brandt

10/01/2012 18:36:53
Quote Anchor link
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
 
Jordy -

Jordy -

10/01/2012 19:02:09
Quote Anchor link
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.


Dit kun je ook doen:
Vervang
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$w
= imagesx($img);
$h = imagesy($img);
?>

door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
list($w, $h, $type, $attr) = getimagesize($img);
?>
Gewijzigd op 10/01/2012 19:06:06 door Jordy -
 
Kris Peeters

Kris Peeters

11/01/2012 12:22:01
Quote Anchor link
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 ?
 
Peter  paul

peter paul

11/01/2012 17:04:26
Quote Anchor link
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
Gewijzigd op 11/01/2012 17:15:48 door peter paul
 
Kris Peeters

Kris Peeters

11/01/2012 17:23:31
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$img
= imagecreatefromjpeg('mijn_afbeelding.jpg');
$average = average($img);
?>


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
 
Koh do

koh do

16/01/2012 12:35:21
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;

?>


Hij echot:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
R= G= B=
 
Jurgen B

Jurgen B

16/01/2012 12:36:54
Quote Anchor link
Moet het niet zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $average = new average_color($img) ?>


op regel 43?
 
Erwin H

Erwin H

16/01/2012 12:40:04
Quote Anchor link
En als je van dit:

$r = 0 . $r;

nu eens dit maakt:

$r = "0" . $r;

(en hetzelfde bij g en b).
 
Koh do

koh do

16/01/2012 12:42:07
Quote Anchor link
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
Gewijzigd op 16/01/2012 12:54:48 door koh do
 



Overzicht Reageren