Toon posts:

[php]Kleur doorgeven als parameter

Pagina: 1
Acties:

Onderwerpen


  • jvdmeer
  • Registratie: april 2000
  • Laatst online: 08-09 11:06
Ik zit al een tijdje met een probleem. Ben wezen zoeken op google naar "php passing color parameter", en dergeliijke, maar ik heb nergens een oplossing gevonden voor een ogenschijnlijk simpel probleem.

Eerst de geminimaliseerde 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
<?php
$image = imagecreatetruecolor(70, 30);

$backg = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, 69, 29, $backg);

$red = imagecolorallocate($image, 255, 0, 0);
$green = imagecolorallocate($image, 0, 255, 0);

imagefilledrectangle ($image,10,10,20,20, $red);
green ($image, $green);
blue ($image);

header('Content-type: image/png');

imagepng($image);
imagedestroy($image);

function green(&$im, $col) {
  imagefilledrectangle ($im,50,10,60,20, $col);
}

function blue(&$im) {
  $blue = imagecolorallocate($im, 0, 0, 255);
  imagefilledrectangle ($im,50,10,60,20, $blue);
}
?>


Nu verwacht ik drie vierkantjes naast elkaar, maar in praktijk blijk ik groen te missen:
http://www.vd-meer.net/test.php

ik weet dat ik het kan oplossen door een nieuw object te maken, waarbij de functies en de image-variable deel zijn van hetzelfde object, maar dit zou ook moeten werken.

Kan iemand mij vertellen hoe ik groen licht (of eigenlijk een vierkantje krijg)?

PS: de code is maximaal geminimaliseerd. Het origineel is een stuk uitgebreider, maar de essentie blijft.
PS: De kleur heb ik ook al geprobeerd door te geven `by reference`, maar dat hielp niet.

  • Jeffrey v. Hees
  • Registratie: augustus 2006
  • Laatst online: 24-09 00:59
Je moet de functies in PHP declareren vóórdat je deze aanroept. Volgens mij gaat dat hier fout.

eMeals.nl


  • NMe
  • Registratie: februari 2004
  • Laatst online: 26-09 14:38

NMe

Quia Ego Sic Dico.

If you're uncomfortable with using RGB codes you can bypass this function completely by assigning the hex values directly, two example replacements are:

PHP:
1
2
3
4
5
6
7
8
<?php
//Equivalents
$white = imagecolorallocate($im, 255, 255, 255);
$white = 0x00FFFFFF; //First two are alpha, then triplet

$grey = imagecolorallocate($im, 62, 62, 62);
$grey = 0x003E3E3E;
?>


This should work in all applications, as it seems that is all the function returns.
Helpt dat?
Jeff van Hees schreef op donderdag 11 november 2010 @ 14:22:
Je moet de functies in PHP declareren vóórdat je deze aanroept. Volgens mij gaat dat hier fout.
Onzin.

[Voor 17% gewijzigd door NMe op 11-11-2010 14:24]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Keiichi
  • Registratie: juni 2005
  • Laatst online: 26-09 15:40
hou je rekening met de scope van de gedeclareerde variablen?

Iets in een function kan niet zomaar iets pakken uit de 'main'scope. (Tenzij specifiek aangegeven met bv 'global $var' in de scope van de function.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • Lye
  • Registratie: januari 2010
  • Laatst online: 26-09 04:46
Jeff van Hees schreef op donderdag 11 november 2010 @ 14:22:
Je moet de functies in PHP declareren vóórdat je deze aanroept. Volgens mij gaat dat hier fout.
Uh, nee hoor, dat hoeft niet.

Het probleem is dat het groene vierkantje dezelfde coordinaten als het blauwe vierkantje heeft. Er stond wel een groen vierkant, maar hier is dus een blauwe overheen geplakt.

  • NMe
  • Registratie: februari 2004
  • Laatst online: 26-09 14:38

NMe

Quia Ego Sic Dico.

Keiichi schreef op donderdag 11 november 2010 @ 14:24:
hou je rekening met de scope van de gedeclareerde variablen?

Iets in een function kan niet zomaar iets pakken uit de 'main'scope. (Tenzij specifiek aangegeven met bv 'global $var' in de scope van de function.
Waar zie jij in de green-functie variabelen gebruikt worden die niet als parameter doorgegeven worden?
Lye schreef op donderdag 11 november 2010 @ 14:26:
[...]

Het probleem is dat het groene vierkantje dezelfde coordinaten als het blauwe vierkantje heeft. Er stond wel een groen vierkant, maar hier is dus een blauwe overheen geplakt.
:D Goed gezien. Beetje onhandig. :P

Overigens gebruik ik zelf liever die hex-waardes dan imagecolorallocate, maar da's persoonlijk denk ik. :P

[Voor 33% gewijzigd door NMe op 11-11-2010 14:28]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • kwaakvaak_v2
  • Registratie: juni 2009
  • Laatst online: 24-09 18:45
Idd.. doe anders maar eens een var_dump($col) in je green functie en kijk wat er op dat moment in zit.

Driving a cadillac in a fool's parade.


  • Lye
  • Registratie: januari 2010
  • Laatst online: 26-09 04:46
NMe schreef op donderdag 11 november 2010 @ 14:27:
Overigens gebruik ik zelf liever die hex-waardes dan imagecolorallocate, maar da's persoonlijk denk ik. :P
Goede tip, vond het altijd al een beetje vreemd dat je imagecolorallocate moest gebruiken voor iets simpels als een kleur.

Niet dat ik vaak met gd werk maargoed..

  • jvdmeer
  • Registratie: april 2000
  • Laatst online: 08-09 11:06
Lye schreef op donderdag 11 november 2010 @ 14:26:
[...]


Uh, nee hoor, dat hoeft niet.

Het probleem is dat het groene vierkantje dezelfde coordinaten als het blauwe vierkantje heeft. Er stond wel een groen vierkant, maar hier is dus een blauwe overheen geplakt.
Schaam in een hoekje :o 8)7

het was dus een dubbelprobleem. Op mijn werkelijke pagina is het een reference die niet goed stond, maar die had ik in het voorbeeld gecorrigeerd, maar in het voorbeeld heb ik de vierkantjes fout gecopy-pasted.

Heerlijk om met zoiets al twee dagen bezig te zijn...

  • NMe
  • Registratie: februari 2004
  • Laatst online: 26-09 14:38

NMe

Quia Ego Sic Dico.

jvdmeer schreef op donderdag 11 november 2010 @ 14:33:
[...]


Schaam in een hoekje :o 8)7

het was dus een dubbelprobleem. Op mijn werkelijke pagina is het een reference die niet goed stond, maar die had ik in het voorbeeld gecorrigeerd, maar in het voorbeeld heb ik de vierkantjes fout gecopy-pasted.

Heerlijk om met zoiets al twee dagen bezig te zijn...
Teken je in je echte code trouwens ook op 3 verschillende manieren hetzelfde soort figuren? Ik neem aan dat je die green-functie wil gebruiken als generieke tekenmethode? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Jeffrey v. Hees
  • Registratie: augustus 2006
  • Laatst online: 24-09 00:59
Lye schreef op donderdag 11 november 2010 @ 14:26:
[...]


Uh, nee hoor, dat hoeft niet.
Verrekt zeg. Nooit geweten. Herinner mij vaak errors gekregen te hebben wanneer een functie niet gedeclareerd was voordat ik deze aanriep, maar het blijft inderdaad zo te zijn. Stom zeg 8)7

eMeals.nl


  • CodeCaster
  • Registratie: juni 2003
  • Niet online

CodeCaster

👌👀 good shit ✔💯

Afgezien van het feit dat je het vierkantje overtekent met een andere kleur slaan je functienamen op kaas.

Er is niks aan de hand als ik hier een pimpelpaarse kleur (eventueel met gouden randje) aan de functie green() meegeef. Sterker nog, als je een functie gaat maken voor één aanroep... waarom zet je niet gewoon drie keer imagefilledrectangle() onder elkaar? :)

edit:

GRR NMe, ik had dit verhaal al getikt maar werd weggeroepen.

[Voor 9% gewijzigd door CodeCaster op 11-11-2010 14:42]

As always, we are nailed to a cross of our own construction.


  • jvdmeer
  • Registratie: april 2000
  • Laatst online: 08-09 11:06
NMe schreef op donderdag 11 november 2010 @ 14:35:
[...]

Teken je in je echte code trouwens ook op 3 verschillende manieren hetzelfde soort figuren? Ik neem aan dat je die green-functie wil gebruiken als generieke tekenmethode? :)
Nee, de echte code tekent een polygoon die een X aantal pixels kleiner/groter is dan de opgegeven polygoon.
Dus in dit voorbeeld, de groene polygoon wordt getekend bij het doorgeven van de grijze polygoon als parameter.


edit:
Nu is kleiner vreemd gedefinieerd bij een polygoon die zich zelf kruist. Maar in dit geval ligt de 1e lijn van de nieuwe polygoon 10 pixels rechts van de lijn van de originele.

[Voor 14% gewijzigd door jvdmeer op 11-11-2010 14:45]


  • MueR
  • Registratie: januari 2004
  • Laatst online: 24-09 17:44

MueR

Moderator Devschuur®

is niet lief

Jeff van Hees schreef op donderdag 11 november 2010 @ 14:36:
Verrekt zeg. Nooit geweten. Herinner mij vaak errors gekregen te hebben wanneer een functie niet gedeclareerd was voordat ik deze aanriep, maar het blijft inderdaad zo te zijn. Stom zeg 8)7
Dan had je die vast in een ander bestand staan wat via include/require werd binnengehaald. In dergelijke gevallen krijg je inderdaad wel errors.

Anyone who gets in between me and my morning coffee should be insecure.
Breng nu uw applicatie naar de kloot. Dat is veel beter! Nu samen met klootopslag. Voor maar €9,95. Doei doei!


  • ReenL
  • Registratie: augustus 2010
  • Laatst online: 22-03-2015
Al geprobeerd de & tekens weg te halen, php doet standaard pass by reference...

Als je het betreffende plaatje opent met notepad(++) zie je dan onderaan geen php errors staan met error_reporting aan?

Net even getest, maar als ik de coordinaten van groen aanpas krijg ik gewoon het correcte plaatje, dus je versimpelde voorbeeld is niet vergelijkbaar met je echte script.

  • NMe
  • Registratie: februari 2004
  • Laatst online: 26-09 14:38

NMe

Quia Ego Sic Dico.

ReenL: het probleem was al opgelost hoor.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Lye
  • Registratie: januari 2010
  • Laatst online: 26-09 04:46
ReenL schreef op vrijdag 12 november 2010 @ 14:14:
Al geprobeerd de & tekens weg te halen, php doet standaard pass by reference...

Als je het betreffende plaatje opent met notepad(++) zie je dan onderaan geen php errors staan met error_reporting aan?

Net even getest, maar als ik de coordinaten van groen aanpas krijg ik gewoon het correcte plaatje, dus je versimpelde voorbeeld is niet vergelijkbaar met je echte script.
Uhm, php doet niet standaard pass by reference. Alles behalve objecten is pass by value, niet pass by reference.
Verder zie je, als je via php een plaatje genereerd, meestal de errors bovenaan staan. Daarna een error met "Headers already sent" en daarna een plain/text representatie van de afbeelding. Anders zou je eerst een plaatje uitspugen en daarna pas wijzigingen op doorvoeren. Tenzij je natuurlijk output buffering gebruikt en de errors pas na het outputten van het plaatje weergeeft, maar waarom je dat zou willen...
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee