[php] Witte tekst op bestaand plaatje

Pagina: 1
Acties:

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 29-08 13:53
Hallo,

Ik heb een bestaand plaatje (title.jpg). Daar wil ik een witte tekst op hebben. Hieronder mijn script:

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
<?php
if ($Page == "home.php") {
    $text = "Home";
}
// Maak een JPEG header
header("Content-type: image/jpeg");

// Kopieer het plaatje van een reeds bestaand bestandje
$plaatje = ImageCreateFromJPEG("img/title.jpg");
$wit= ImageColorAllocate($plaatje, 255, 255, 255);

// Zoek hoe breed en hoe hoog de tekst gaat worden
if (!isset($text)) $text = "GamerzNET Rulez!!";
$font = "addecrg_.ttf";
$box = ImageTTFBBox(20, 0, $font, $text);
$hoogte  = $box[1] - $box[7];
$breedte = $box[2] - $box[0];

// Bereken de "default" coordinaten
$x_coordinaat = $box[0];
$y_coordinaat = $hoogte - $box[1];

// Bereken nu de verschuiving die nodig is om de tekst de centreren
$offset_x = (int)((ImageSX($plaatje) - $breedte) / 2);
$offset_y = (int)((ImageSY($plaatje) - $hoogte) / 2) - 2;
$offset_y = 7;

// Teken de tekst
ImageTTFText($plaatje, 20, 0, $x_coordinaat + $offset_x, $y_coordinaat + $offset_y, $wit, $font, $text);

// Schrijf de output weg
ImageJPEG($plaatje, '', 100);
ImageDestroy($plaatje);
?>


Ik heb al een heleboel dingen geprobeerd om de tekst wit te krijgen, maar niks lukt. Zoals het script nu is, wordt de tekst groen. Enkele van deze dingen zijn:
$wit= ImageColorAllocate($plaatje, 255, 255, 255); vervangen door:
- ImageColorResolve...
- ImageColorExact...

Volgens mij moet dit de goede manier zijn, maar het werkt niet. Ik heb het bestandje maar even geüpload naar mijn server: http://www.gamerznet.nl/plaatje.php

Ik hoop dat jullie een oplossing voor mijn probleem kunnen vinden. Ik kom er even echt niet meer uit.

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Probeer eens 2 keer de functie ImageColorAllocate aan te roepen, dus bijv.:

PHP:
1
2
$zwart= ImageColorAllocate($plaatje, 0, 0, 0); // Dit heeft verder geen nut!!!!!!
$wit= ImageColorAllocate($plaatje, 255, 255, 255);


Want op php.net stond:
"The first color you allocate to the image is used as the background color for that image.
Colors allocated after the first can be used for the text and shapes."

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 29-08 13:53
Dit werkt helaas ook niet. Ik heb het alweer met alle verschillende soorten gedaan (ImageColorAllocate, ImageColorResolve, ImageColorExact, enz.). Geen één werkt. Ik krijg steeds groene tekst. Alleen bij ImageColorResolve krijg ik grijze tekst. En als ik de kleur zwart erheen zet, dan werkt het wel gewoon. Maar ik wil het juist wit hebben.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je moet met JPG de ColorClosest methode gebruiken geloof ik, staat dacht ik zelfs bij die ColorAllocate methodes in de php-manual.

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Dit stond ook in de manual, misschien dat je hier wat aan hebt:

This will help anyone trying to control font colors in a JPEG. You have to create a temporary image first, allocate the colors then merge the images before it works. Go figure.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$im_size = GetImageSize ("img/title.jpg"); 
$imageWidth = $im_size[0]; 
$imageHeight = $im_size[1]; 

$plaatje = imageCreate( $imageWidth, $imageHeight ); 

// - of met GD 2+ - 
//$plaatje = imageCreateTrueColor( $imageWidth, $imageHeight ); 

$wit = ImageColorAllocate( $plaatje, 255,255,255); 

$plaatje_temp = ImageCreateFromJPEG("img/title.jpg");

ImageCopy ($plaatje, $plaatje_temp, 0, 0, 0, 0, $imageWidth, $imageHeight); 
ImageDestroy ($plaatje_temp);


En nu kun je iets met de variable $plaatje doen, dus in jouw geval die tekst toevoegen.

  • LeonT
  • Registratie: Juni 2001
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
Header("Content-type: image/pjpeg"); 

$im = ImageCreateFromJPEG("Image1.jpg"); 

$white = imagecolorclosest($im,255,255,255);

imagestring($im,5,1,1,"Blablatekst",$white);

Imagejpeg($im);
ImageDestroy ($im);

Met dit scriptje lukt het mij gewoon om de tekst in alle kleuren van de regenboog te zetten.

[edit]
Even met jou plaatje getest en dan lukt het mij ook niet met colorclosest, omdat in het plaatje alleen maar groene kleuren voorkomen en dus de dichtsbij liggende kleur van wit de lichtste kleur groen wordt. Met gewoon imagecollorallocate werkt het ook niet omdat wit niet in het kleuren pallet van het plaatje zit denk ik.

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
LeonT schreef op 19 augustus 2002 @ 13:49:
PHP:
1
2
3
4
5
6
7
8
9
10
Header("Content-type: image/pjpeg"); 

$im = ImageCreateFromJPEG("Image1.jpg"); 

$white = imagecolorclosest($im,255,255,255);

imagestring($im,5,1,1,"Blablatekst",$white);

Imagejpeg($im);
ImageDestroy ($im);

Met dit scriptje lukt het mij gewoon om de tekst in alle kleuren van de regenboog te zetten.

[edit]
Even met jou plaatje getest en dan lukt het mij ook niet met colorclosest, omdat in het plaatje alleen maar groene kleuren voorkomen en dus de dichtsbij liggende kleur van wit de lichtste kleur groen wordt. Met gewoon imagecollorallocate werkt het ook niet omdat wit niet in het kleuren pallet van het plaatje zit denk ik.
...daarom moet je ook eerst tijdelijk een TrueColor plaatje aanmaken en vervolgens het orginele plaatje kopien naar dat tijdelijke TrueColor plaatje. Zie mijn topic hierboven.....

  • LeonT
  • Registratie: Juni 2001
  • Niet online
KillR-B schreef op 19 augustus 2002 @ 13:56:
[...]

...daarom moet je ook eerst tijdelijk een TrueColor plaatje aanmaken en vervolgens het orginele plaatje kopien naar dat tijdelijke TrueColor plaatje. Zie mijn topic hierboven.....
Klopt, zag het ook staan op php.net. :)

Zo werkt hij dus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Header("Content-type: image/pjpeg");
 
$im_size = GetImageSize ( "Image.jpg" ); 
$imageWidth = $im_size[0]; 
$imageHeight = $im_size[1]; 

$im = imageCreate( $imageWidth, $imageHeight ); 
$white = imagecolorallocate($im,255,255,255);

$im2 = ImageCreateFromJPEG("Image.jpg"); 

ImageCopy ($im,$im2,0,0,0,0, $imageWidth, $imageHeight); 
ImageDestroy ($im2); 

imagestring($im,5,1,1,"Blablatekst",$white);

Imagejpeg($im);
ImageDestroy ($im);

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

taal toegevoegd aan de topictitel (denk daar voortaan zelf even aan)

.edit: oh ik zie dat je nieuw bent op dit forum, welkom :)
Lees even de P&W FAQ en de Quickstart Guide door, daar staat een hoop info in over hoe je een topic moet openen en wat de algemene huisregels van P&W zijn :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 29-08 13:53
Ik zal es effe kijken. Hoop dat het werkt.

Over mijn topictitel: ik was vergeten er [php] voor te zetten. Ik wou dit later aanpassen, maar dit wou niet. Mijn excuus.

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 29-08 13:53
Bedankt allemaal. Het werkt nu zoals het moet! Alleen nog even een vraagje: klopt het dat de kwaliteit van het plaatje met "100" nog niet zo wordt zoals het is???

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Frank-2k schreef op 20 augustus 2002 @ 14:44:
Bedankt allemaal. Het werkt nu zoals het moet! Alleen nog even een vraagje: klopt het dat de kwaliteit van het plaatje met "100" nog niet zo wordt zoals het is???
Kun je je vraag misschien iets beter formuleren, want ik snap totaal niet wat je met "100" bedoeld?

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 29-08 13:53
ImageJPEG($plaatje, '', 100);

De kwaliteit is daar ingesteld op 100%. Maar die kwaliteit is niet 100% tegenover het origineel. Het is ongeveer 95% denk ik. Klopt dit? Of is dit een fout in een script ofzo?

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Frank-2k schreef op 21 augustus 2002 @ 18:03:
ImageJPEG($plaatje, '', 100);

De kwaliteit is daar ingesteld op 100%. Maar die kwaliteit is niet 100% tegenover het origineel. Het is ongeveer 95% denk ik. Klopt dit? Of is dit een fout in een script ofzo?
Dat kan idd kloppen dat de kwaliteit lager uitvalt dan de gewenste 100%. Want op PHP.net stond:

"As the GD 1.8.4 manual says, the quality should be a value in the range 0-95. And this seems to be true - setting it to 100 doesn't change the default quality."

Dus als je de waarde 100 meegeeft, wordt er waarschijnlijk 75% (= standaard waarde) gebruikt. Dus raad ik je aan om eens de waarde 95 te gebruiken i.p.v. 100.

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 29-08 13:53
Nee. Het werkt niet. Maar laat maar zitten.

  • Galoptic
  • Registratie: Februari 2001
  • Laatst online: 31-08 23:02
KillR-B schreef op 21 augustus 2002 @ 22:06:
[...]

Dat kan idd kloppen dat de kwaliteit lager uitvalt dan de gewenste 100%. Want op PHP.net stond:

"As the GD 1.8.4 manual says, the quality should be a value in the range 0-95. And this seems to be true - setting it to 100 doesn't change the default quality."

Dus als je de waarde 100 meegeeft, wordt er waarschijnlijk 75% (= standaard waarde) gebruikt. Dus raad ik je aan om eens de waarde 95 te gebruiken i.p.v. 100.
Nick, College, Broeder, MSN-pal... 'k Denk dat-ie het heeft over de automatische quality loss die optreedt wanneer je een JPEGje opnieuw opslaat. Da's niet echt goed te vermijden... (Ik ben verder php-n00b, dus het technische gebla tussen de 95-100% kan ik je niet toelichten.)
Pagina: 1