Avatar billede acid-head Nybegynder
07. juni 2004 - 14:11 Der er 11 kommentarer og
1 løsning

GDlib: resize + sort/hvid

Hej eksperter..

Jeg er ved at lave et lille nyhedsystem, hvor folk skal have mulighed for at uploade billeder.. Det skal fungere sådan, at når man uploader et billede bliver der automatisk genereret en miniature udgave i sort/hvis..

De funktioner jeg mangler er altså:
  * en funktion der kan gøre billedet mindre.
  * og en funktion der ændre farvescalaen til gråtoner

På forhånd tak
//Jeppe Stampe
Avatar billede dennismp Nybegynder
07. juni 2004 - 14:23 #1
Du kan kigge på gd-pakken.
http://dk2.php.net/gd

Alternativ er der ImageMagick som er en række unix-programmer som du kan bruge. Men det er ldit mere besværligt (GD er normalt nemmere da den er integeret med php)
Avatar billede acid-head Nybegynder
07. juni 2004 - 16:21 #2
Jeg har fundet ud af hvordan jeg resizer billedet ved hjælp af nogle af funktiorne..

Men hvordan jeg laver billedet om til gråtoner er mig stadig en gåde..!
Avatar billede dennismp Nybegynder
07. juni 2004 - 16:25 #3
Avatar billede acid-head Nybegynder
07. juni 2004 - 20:13 #4
Jeg ved ikke om du har testet de to metoder, men jeg kan ikke rigtig få nogle af dem til at virke. Når jeg prøver dem, får jeg bare et nyt billede, magen til orginalen.. Det kunne tyde på at jeg laver noget galt..?
Avatar billede acid-head Nybegynder
07. juni 2004 - 20:46 #5
<?php
header("Content-type: image/jpeg");

$image = imagecreatefromjpeg("billede.jpg");

for($a=0;$a<imagecolorstotal($image);$a++)
{
  $color = imagecolorsforindex($image,$a);
  $R=.299 * ($color['red'])+ .587 * ($color['green'])+ .114 * ($color['blue']);
  $G=.299 * ($color['red'])+ .587 * ($color['green'])+ .114 * ($color['blue']);
  $B=.299 * ($color['red'])+ .587 * ($color['green'])+ .114 * ($color['blue']);
  ImageColorSet($image_id, $a, $R, $G, $B);
}

imagejpeg($image);
imagedestroy($image);
?>

Når jeg kører ovenstående kode, så får jeg bare outputtet det orginale billede engang til.. Efter lidt debugging fandt jeg ud af at

imagecolorstotal($image);

laver fejl.. Hvad går der galt..? Kan ikke rigtig se jeg har lavet noget forkert..
Avatar billede acid-head Nybegynder
07. juni 2004 - 20:50 #6
Hov.. $image_id skulle selvfølgelig bare være $image i linie 14..
Avatar billede acid-head Nybegynder
07. juni 2004 - 20:51 #7
Da jeg prøvede scriptet på en anden server, virkede det unden problemer.. imagecolorstotal() må være GD-versions afhængig.. Det vil jeg lige undersøge..
Avatar billede acid-head Nybegynder
07. juni 2004 - 21:01 #8
Den server hvor det IKKE virker:

FreeBSD 4.9
Apache/1.3.27
PHP Version 4.3.2
GD-version: bundled (2.0.12 compatible)


Den server hvor det VIRKER:

Windows NT 5.0 build 2195 (Win2k)
Apache/1.3.20
PHP Version 4.1.1
GD-version: 1.6.2 or higher

Lidt mærkeligt at det virker på den server med det ælste software..
Avatar billede dennismp Nybegynder
08. juni 2004 - 00:49 #9
Prøv med dette kode.  imagetruecolortopalette kræver GD2+

<?php
header("Content-type: image/jpeg");
$image = imagecreatefromjpeg("artobg.jpg");

$t = imagecolorstotal($image);
if( $t == 0 ) {
        $t = 256;
        imagetruecolortopalette($image, true, $t);
}

for($a=0;$a<$t;$a++)
{
  $color = imagecolorsforindex($image,$a);
  $R=.299 * ($color['red'])+ .587 * ($color['green'])+ .114 * ($color['blue']);
  $G=.299 * ($color['red'])+ .587 * ($color['green'])+ .114 * ($color['blue']);
  $B=.299 * ($color['red'])+ .587 * ($color['green'])+ .114 * ($color['blue']);
  ImageColorSet($image, $a, $R, $G, $B);
}

imagejpeg($image);
imagedestroy($image);
?>
Avatar billede acid-head Nybegynder
08. juni 2004 - 11:54 #10
Yes, nu virkede det..
Men hvorfor retunerer imagecolorstotal() 0?

Hvis du smider et svar, så får du point :)
Avatar billede dennismp Nybegynder
08. juni 2004 - 12:11 #11
Det ser ud til at den ikke kan tælle farver for truecolor billeder. Så man konverterer det til en 'palette' bilede istedet og så arbejde derfra.
Avatar billede acid-head Nybegynder
08. juni 2004 - 16:53 #12
Okay.. Super duper at det virker.. ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester