Multidesk.be » Forums » PHP » [PHP] Image gemaakt met PHP niet in IE

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door fawkes op maandag 20 juni 2011 om 18:29:15.
fawkes' avatar
Multiviteit: 230
-
-
Hallo,

ik heb een plaatje gemaakt met PHP.
Dit plaatje wordt dan dmv CSS als achtergrond van de site.
in alle browsers werkt dit prima, behalve Internet Explorer.
Heeft iemand een idee waarom Internet Explorer de PHP image niet weergeeft?

dit zijn de codes die van belang zijn:

PHP
  1. <?php 
  2. // set hoogte en breedte image
  3. $height=1;
  4. $width=1200;
  5.  
  6. // creŽer image
  7. $image=imagecreate($width, $height)
  8.  
  9. // achtergrondkleur instellen
  10. $back=imagecolorallocate($image, 0, 0, 0)
  11.  
  12. // eerste gedeelte kleur
  13. $first=imagecolorallocate($image, 0, 128, 0);
  14.  
  15. // eerste gedeelte
  16. imageline($image, 0, 0, 199, 0, $first);
  17.  
  18. $x=200;
  19.  
  20. // rest
  21. for($i=127;$i>0;$i--){
  22.         $next=imagecolorallocate($image, 0, $i, 0);
  23.         imageline($image, $x, 0, $x + 5, 0, $next);
  24.         $x=$x+6;
  25. }
  26.  
  27. imageline($image, $x, 0, 1199, 0, $back);
  28.  
  29. // Image PNG
  30. imagepng($image);
  31.  
  32. // create an interlaced image for better loading in the browser
  33. imageInterlace($image, 1);
  34. // mark background color as being transparent
  35. imageColorTransparent($image, $back);
  36.  
  37. // image verwijderen
  38. imagedestroy($image);
  39. ?>


CODE
  1. html{
  2.         background-color:              #000000;
  3.         background-image:             url('/../images/background.php');
  4.         background-repeat:            repeat-y;
  5. }
  6.  
-
^ Reactie #1 geschreven door thekid op maandag 20 juni 2011 om 19:20:33.
thekid's avatar
Multiviteit: 5273
Moderator
contenttype, contentencoding en evt contentdisposition instellen :D

(in uw php create image bestand, hť)

voorbeeld: http://php.net/manual/en/function.header.php
Deze tekst werd het laatst bewerkt voor 21.61 % door thekid op maandag 20 juni 2011 om 19:25:00.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door fawkes op maandag 20 juni 2011 om 21:23:50.
fawkes' avatar
Multiviteit: 230
-
-
Ik heb nu deze erbij gezet:
PHP
  1. <?php
  2. header('Content-type: image/png');
  3. header('Content-Encoding: gzip');
  4. header('Content-Disposition: attachment; filename=/../images/background.php');
  5. ?>

maar in internet explorer zie ik niks en zelfs in google chrome verdwijnt hij (al uitgeprobeerd, komt door de encoding.) doe ik nu iets niet goed of vergeet ik nog een bepaald detail?
(volledig script: )
PHP
  1. <?php 
  2. header('Content-type: image/png');
  3. header('Content-Encoding: gzip');
  4. header('Content-Disposition: attachment; filename=/../images/background.php');
  5.  
  6. // set hoogte en breedte image
  7. $height=1;
  8. $width=1200;
  9.  
  10. // creŽer image
  11. $image=imagecreate($width, $height)
  12.  
  13. // achtergrondkleur instellen
  14. $back=imagecolorallocate($image, 0, 0, 0)
  15.  
  16. // eerste gedeelte kleur
  17. $first=imagecolorallocate($image, 0, 128, 0);
  18.  
  19. // eerste gedeelte
  20. imageline($image, 0, 0, 199, 0, $first);
  21.  
  22. $x=200;
  23.  
  24. // rest
  25. for($i=127;$i>0;$i--){
  26.         $next=imagecolorallocate($image, 0, $i, 0);
  27.         imageline($image, $x, 0, $x + 5, 0, $next);
  28.         $x=$x+6;
  29. }
  30.  
  31. imageline($image, $x, 0, 1199, 0, $back);
  32.  
  33. // Image PNG
  34. imagepng($image);
  35.  
  36. // create an interlaced image for better loading in the browser
  37. imageInterlace($image, 1);
  38. // mark background color as being transparent
  39. imageColorTransparent($image, $back);
  40.  
  41. // image verwijderen
  42. imagedestroy($image);
  43. ?>
Deze tekst werd het laatst bewerkt voor 0.04 % door fawkes op maandag 20 juni 2011 om 21:23:58.
-
^ Reactie #3 geschreven door thekid op maandag 20 juni 2011 om 23:15:14.
thekid's avatar
Multiviteit: 5273
Moderator
bijna :)

attachment is voor automatisch voorstellen om een image te bewaren, inline is om in de browser weer te geven (weet je dan ook alweer :D)

best is ook dat je binary gebruikt aangezien uw image een byte array is

dienen gzip mag je volgens mij weglaten

een filename helpt gewoon de naam voor de browser te geven, dus noem deze dan ook als image

PHP
  1.  
  2. header("Content-Disposition: inline; filename=background.png");
  3. header("Content-Type: Image/png; ");
  4. header("Content-Transfer-Encoding: binary"); // deze is optioneel denk ik
  5.  

Deze tekst werd het laatst bewerkt voor 84.52 % door thekid op maandag 20 juni 2011 om 23:22:29.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #4 geschreven door Kilian op dinsdag 21 juni 2011 om 09:33:42.
Kilian heeft nog geen avatar toegevoegd
Multiviteit: 1629
Misschien off topic, maar hoe dynamisch is de achtergrond? Het vraagt altijd meer van de server om eerst de achtergrond zelf te "tekenen" dan dat je die 1x erop zet (al dan niet via PHP), en vervolgens oproept.

Nu, je zal er niet veel van merken maar bij een grotere site kan dit toch al iets uitmaken.
^ Reactie #5 geschreven door thekid op dinsdag 21 juni 2011 om 10:38:18.
thekid's avatar
Multiviteit: 5273
Moderator
ja, ik ga daar ook mee akkoord :D

vooral als je dan nog eens fixed een breedte zet (anders kon je nog zeggen dat het is om dynamisch de achtergrondbreedte aan te passen aan het scherm :d)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #6 geschreven door fawkes op dinsdag 21 juni 2011 om 10:46:59.
fawkes' avatar
Multiviteit: 230
-
-
@Kilian, dat zit ik nu ook te overwegen. Ben dat nu ook even gaan uitproberen, maar zelfs als ik de PHP image opsla als PNG bestand (via <img src''>, en vervelend genoeg werkt dat wel in IE) en die in de CSS zet, laat internet explorer het plaatje nog steeds niet zien. Dan heb ik deze CSS:

CODE
  1. html{
  2.         background-color:              <?php echo $bg_color; ?>;
  3.         background-image:             url('/../images/background.png');
  4.         background-repeat:            repeat-y;
  5. }


Maar dat werkt ook niet. Kan IE deze CSS wel aan eigenlijk?

=====

Daarna heb ik gedacht dat het lag aan PNG, dus dat het een JPG moet zijn. Dus de veranderingen in de PHP:
PHP
  1. <?php
  2. header("Content-Type: Image/jpeg;");
  3.  
  4. // de rest
  5.  
  6. imagejpeg($image);
  7. ?>


Liet ook wat zien in de rest, maar niet in IE, dat uiteindelijk opgeslagen als JPG en dat wordt uiteindelijk heel lelijk in andere browsers (veel lijnen ertussen, zal wel aan JPG liggen) en zelfs in IE wordt weer niks weergeven.

=====

Mijn laatste punt van twijfel was weer de CSS. Ik gebruik deze achtergrond bij HTML omdat ik twee achtergrond afbeeldingen heb. Dus ik dacht, zet het eens bij body. Raar genoeg werkt dat wel, alleen geeft dan rond de achtergrond bij andere browsers een soort van margins rond de image en heb ik mijn tweede achtergrond plaatje niet meer. De margins vind ik niet zo erg, staat ook best leuk als ik dat zwart maak, maar het tweede achtergrond plaatje wil ik wel hebben. Dit was mijn achtergond CSS:

CODE
  1. html{
  2.         background-color:              <?php echo $bg_color; ?>;
  3.         background-image:             url('/../images/background.php');
  4.         background-repeat:            repeat-y;
  5.         background-position:    right bottom;
  6. }
  7.  
  8. body{
  9.         background-image:             url('/../images/achtergrond(3).png');
  10.         background-repeat:            no-repeat;
  11.         background-position:    right bottom;
  12.         color:          #FFFFFF;
  13. }


en dit is het nu!

CODE
  1. html{
  2.         background-image:             url('/../images/achtergrond(3).png');
  3.         background-repeat:            no-repeat;
  4.         background-position:    right bottom;
  5.         background-color:              <?php echo $bg_color; ?>;
  6. }
  7.  
  8. body{
  9.         background-color:              <?php echo $bg_color; ?>;
  10.         background-image:             url('/../images/background.php');
  11.         background-repeat:            repeat-y;
  12.         background-position:    left top;
  13.         color:          #FFFFFF;
  14. }


Als ik op een andere manier twee achtergrondplaatjes kan hebben, hoor ik dat graag. In zekere zin hebben we het dan ook opgelost.

Maar mijn vraag is eigenlijk wel waarom IE een achtergrond image wel kan hebben op body, maar niet op HTML. Dat zal op een of andere manier toch wel moeten kunnen?
-
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen