Galerie mit greyscaled thumbnails

hallo zusammen,

ich habe ein galerie-script das aut. thumbs erstellt.

nun möchte ich gerne die thumbnails schwarzweiss haben (graustufen ) und wenn man auf das bild klickt, geht das popup auf mit den normalen farben.

kann mir jemand helfen?

hier die codes:

von index.php

// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
//
// VARIABLES TO ADAPT
//
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*


// absolute path to the directory where the graphics are stored
$abs\_directory = "/home/\*\*\*\*\*\*\*";

// webpath of the directory where the graphics are stored
$web\_directory = "http://www.\*\*\*\*\*\*\*\*";

// which graphics to handle (selected by extension, only files supported by gdlib are supported)
$graphicfiles = array("jpg", "png", "JPG");

// table layout, you may adapt it to your wishes, e.g. change the table-size, background-color, ...
$table\_tag ="

„;
$table_trtag =“";
$table_tdtag ="";
$table_columns = 4;

// position of the picture popup-window (from upper left screen corner)
$xpos = 100;
$ypos = 100;

// ***********************************************************************************************
//
// NO MORE CHANGES NEEDED BELOW THIS POINT
//
// ***********************************************************************************************

$files = array();

//
// function to select only specified graphics
//

function check_graphics($file, $graphicfiles)
{ $pos = strpos($file, „.“);
if ($pos)
{ $fileparts = explode(".", $file, 2);
foreach($graphicfiles as $value)
{ if ($value == $fileparts[1])
{ $filetype = true;
break;
}
else $filetype= false;
}
}
else $filetype = false;
if ($filetype) return(true);
else return(false);
} // end func

//
// function to read all graphic-files in the array $files
//

function read_files($abs_directory)
{ global $graphicfiles, $files;
$handle=opendir($abs_directory);
while ($file = readdir ($handle))
{ if ($file != „.“ && $file != „…“)
{ if (check_graphics($file, $graphicfiles)) $files[] = $file;
}
}
closedir($handle);
} // end func

//
// function to create table with thumbnails
//

function create_table($files)
{ global $xpos, $ypos, $abs_directory, $web_directory, $table_tag, $table_trtag, $table_tdtag, $table_columns;
$r ="\n";
$howmanyfiles = sizeof($files);
$filecount =0;
$table_rows = $howmanyfiles / $table_columns;
$rest = $howmanyfiles % $table_columns;
if ($rest != 0) $table_rows +=1;
echo $table_tag.$r;
for ($rowcount=1; $rowcount \n";
if ($filecount \n";
echo " \n";
echo " „;
$filecount++;
}
else echo“  „;
echo „“.$r;
echo " „.““.$r;
}
echo „“.$r;
}
echo „“.$r;
}

// end func

read_files($abs_directory);
create_table($files);

?>

hier die thumnail.php

header ("Content-type: image/jpeg");

$margin = 120;

$im = imagecreatefromjpeg($image);
$width = imagesx($im);
$height = imagesy($im);
$twidth = $margin - 20;
$theight = ($twidth / $width) \* $height;
$im2 = imagecreatetruecolor($twidth,$theight);


imagecopyresized($im2,$im,0,0,0,0,$twidth,$theight,$width,$height);



imagejpeg($im2);

imagedestroy($im);
imagedestroy($im2);
?\>

hallo sascha,

zugebeben, ich habe mir deinen code jetzt nicht richtig angeschaut.
aber so wie sich deine frage anhört, dürfte dir folgender link eine
hilfe sein: http://www.php.net/manual/en/function.imagecopymerge…
zum einen die beschreibung der verwendung, und zum anderen interessante
beiträgen von usern, die bereits mit problemen zu tun hatten.

sollte dir das nicht helfen dann kann ich mir deinen code ja nochmal
anschauen.

mit freundlichen grüßen

zebulon

Ganz einfach…
Hallo,

füge die fette Zeile in die thumbnail.php ein, und die Bilder sollten sw werden. Hab’s nicht getestet, sollte aber funktionieren.

header ("Content-type: image/jpeg");

$margin = 120;

$im = imagecreatefromjpeg($image);
$width = imagesx($im);
$height = imagesy($im);
$twidth = $margin - 20;
$theight = ($twidth / $width) \* $height;
$im2 = imagecreatetruecolor($twidth,$theight);


imagecopyresized($im2,$im,0,0,0,0,$twidth,$theight,$width,$height);

**imagefilter($im2, IMG\_FILTER\_GRAYSCALE);**


imagejpeg($im2);

imagedestroy($im);
imagedestroy($im2);
?\>

Hmmm… funktioniert so leider nicht…

hast du noch ne andere idee?

hallo, danke auch dir, aber das funktioniert auch nicht. irgendwie fehlt noch ein passender befehl in der index.php. das ganze wird auch von der index aus geladen. aber ich komme einfach nicht drauf. kenne mich viel zu wenig aus :frowning:

kannst Du eigentlich php?
Weil irgendwie vermisse ich die Bereitschaft zu verstehen, was da eigentlich passiert.

evtl hilft es
imagecopymergegray statt imagecopyresized zu verwenden. Hab den Befehl aber noch nie benutzt und deswegen weiss ich auch nicht, obs ohne weiteres Funktioniert. src_w und src_h müssen ggf die Plätze tauschen und am Ende noch ein int pct (was auch immer das genau ist) von 0-100 angegeben werden.

kannst Du eigentlich php?
Weil irgendwie vermisse ich die Bereitschaft zu verstehen, was
da eigentlich passiert.

Hallo und danke für den hinweis.

ich kann leider nicht php, aber ich bin es am versuchen zu lernen, und bin eigentlich auch bereit zu verstehen was da passiert. im bestehenden script habe ich im grossen und ganzen gut verstanden was es genau macht. so mit erstelle ein thumbnail mit der grösse $twidth und $theight und diese daten sind alle in der index.php gespeichert.

auch den befehl imagecopymergegray habe ich schon gesehen und die beschreibung dazu angesehen.
nur habe ich wahnsinnig mühe mit den variablen dahinter. die verstehe ich nicht. was ich auch immer testete hat nie geklappt. irgendwas ist zuviel im script oder zuwenig.

scheint ja ne knacknuss zu sein. ich bin jedenfalls für jede hilfe sehr dankbar, weil… wenn das script mal läuft wie ich es will kann ich auch verstehen was ich falsch gemacht habe.

ich werde es jetz gleich nochmals probieren mit dem imagecopymergegray antstatt imagecopyresized wie du es gschrieben hast, und melde mich wieder.

vielen dank schon mal

sascha

habe das ganze getestet. habe folgenden code von www.php.net verwendet:

<?php // replace with your files<br /> $originalFileName = "cino2.jpg";
 $destinationFileName = "test.jpg";

 // create a copy of the original image
 // works with jpg images
 // fell free to adapt to other formats :wink:
 $fullPath = explode(".",$originalFileName);
 $lastIndex = sizeof($fullPath) - 1;
 $extension = $fullPath[$lastIndex];
 if (preg\_match("/jpg|jpeg|JPG|JPEG/", $extension)){
 $sourceImage = imagecreatefromjpeg($originalFileName);
 }

 // get image dimensions
 $img\_width = imageSX($sourceImage);
 $img\_height = imageSY($sourceImage);

 // convert to grayscale
 // note: this will NOT affect your original image, unless
 // originalFileName and destinationFileName are the same
 for ($y = 0; $y for ($x = 0; $x $rgb = imagecolorat($sourceImage, $x, $y);
 $red = ($rgb \>\> 16) & 0xFF;
 $green = ($rgb \>\> 8) & 0xFF;
 $blue = $rgb & 0xFF;

 $gray = round(.299\*$red + .587\*$green + .114\*$blue);

 // shift gray level to the left
 $grayR = $gray 

das bild wird prima graustufen. ABER…

ich kann in diesem code nur 1 bild als source angeben und muss auch 1 bild als destination angeben.

ist es möglich das ich das ganze in meinem thumbnail.php einbinden kann und dass auch alle bilder umgewandelt werden ohne diese angaben zu machen?

sascha

verstehst Du dieses Script?
da wo in grau umgewandelt wird wird eine schleife erzeugt, die jedes einzelne pixelchen in einen grauwert umrechnet und neu setzt…
Das ist nicht gerade resourcenschonend würde ich mal behaupten…

um nochmal auf den Befehl zurückzukommen
imagecopymergegray ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)

resource = Quelle
dst_im = d e st ination
src_im = s ou rc e
int = Ganzzahl gefordert
dst_x = destination x also x wert wo das Bild anfangen soll
dst_y = wie dst_x nur für die y-achse
src_x = der linke Rand von wo das Bild ausgeschnitten werden soll
src_y = der obere(?) Rand von wo das Bild ausgeschnitten werden soll
src_w = width
src_h = height
pct = k.a. ich nehme an dass das ein bestimmter Faktor der Grauskalierung ist…
das manual sagt da ja:
When pct = 0, no action is taken, when 100 this function behaves identically to imagecopy().
also einfach mal in Deinem Fall so probieren:
thumbnail.php:

header ("Content-type: image/jpeg");

$margin = 120;

$im = imagecreatefromjpeg($image);
$width = imagesx($im);
$height = imagesy($im);
$twidth = $margin - 20;
$theight = ($twidth / $width) \* $height;
$im2 = imagecreatetruecolor($twidth,$theight);


imagecopyresized($im2,$im,0,0,0,0,$twidth,$theight,$width,$height);

imagecopymergegray ($im3,$im2,0,0,0,0,$width,$height,80);

imagejpeg($im3);

imagedestroy($im);
imagedestroy($im2);
imagedestroy($im3);
?\>

aber zum selbst testen bin ich zu faul ^^

funktioniert auch so nicht :frowning: sorry.

also ich bin mit dem latein am ende…

ich glaube da gibt es keine lösung.

so wies aussieht funktioniert es nur mit einzelnen bildern; source und destination, jedoch nicht mit der ganzen galerie.

es sei denn das problem liegt zusätzlich auch in der index.php, aber da steht soviel drin, das kann ich als php-anfänger einfach nicht eruieren.

trotzdem vielen dank für deine hilfe.
sascha

wenn Du ein wenig konkreter wärest…

so wies aussieht funktioniert es nur mit einzelnen bildern;
source und destination, jedoch nicht mit der ganzen galerie.

???

wenn Du das vorhin gepostete script nimmst, dann steht da auch drin warum: Funktioniert nur mit jpg

…dass die imagefilter Funktion erst ab PHP5 existiert, wie ich gerade gesehen habe.

Probiere doch mal diese Funktion:

header ("Content-type: image/jpeg");

$margin = 120;

$im = imagecreatefromjpeg($image);
$width = imagesx($im);
$height = imagesy($im);
$twidth = $margin - 20;
$theight = ($twidth / $width) \* $height;
$im2 = imagecreatetruecolor($twidth,$theight);


imagecopyresized($im2,$im,0,0,0,0,$twidth,$theight,$width,$height);
  
**for ($y = 0; $y \> 8) & 0xFF;  
 imagesetpixel ($im2, $x, $y,  
 ImageColorAllocate ($im2, $gray, $gray, $gray));  
 }  
}**  

imagedestroy($im);
imagedestroy($im2);
?\>

wenn Du das vorhin gepostete script nimmst, dann steht da auch
drin warum: Funktioniert nur mit jpg

ja das ist mir bewusst. ich arbeite auch mit jpg…

das problem ist: ich kann im script ein source-foto angeben und ein destinations-foto.

script ausführen und es schreibt mir ein thumbnail das graustufen hat. super sache.

aber ich möchte ja ein script , das aus allen meinen fotos in einem ordner eine seite erstellt mit thumbnails.

die 2 scripte von mir am anfang gepostet, machen das ja auch. wenn ich das script aufrufe habe ich was ich will, nur sind die thumbs in farbe, und die möchte ich in graustufen angezeigt.

hier das beispiel.

www.saempi.ch/ditzler/php