PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Thumbnails werden Farblich verfälscht :(


Snatch
2004-11-24, 07:52:19
Hallo zusammen,

mit viel Hilfe habe ich deises kleine Script zusammen bekommen, das mir von Bildern die ich zuvor mit einem anderen Script hochgeladen habe Thumbnails erstellt.
Leider sehen die Thumbnails total bescheiden aus. Total Verfälschte Farben etc.
Kann mir einer sagen wie ich das ändern muss damit es geht ?


<?php
function createThumb($img_src, $img_width , $img_height, $des_src)

{

$end = strtolower(substr($img_src, strrpos($img_src,'.')+1));



if( $end == 'gif')

$im = imagecreatefromgif($img_src);

elseif( $end == 'jpg' || $end == 'jpeg' )

$im = imagecreatefromjpeg($img_src);

elseif( $end == 'png' )

$im = imagecreatefrompng($img_src);

else

die('Undefined Filetype!');



list($src_width, $src_height) = getimagesize($img_src);

if($src_width >= $src_height) {

$new_image_width = $img_width;

$new_image_height = $src_height * $img_width / $src_width;

}

if($src_width < $src_height) {

$new_image_height = $img_width;

$new_image_width = $src_width * $img_height / $src_height;

}

$new_image = imagecreate($new_image_width, $new_image_height);

imagecopyresized($new_image, $im, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);



if( $end == 'gif')

imagegif($new_image, $des_src);

elseif( $end == 'jpg' || $end == 'jpeg' )

imagejpeg($new_image, $des_src, 100);

else

imagepng($new_image, $des_src);

}
?>


Vielen Dank

Gruß
Snatch

mithrandir
2004-11-24, 09:19:33
Dere!

Verwende einfach einmal anstatt:
- imagecreate
- imagecopyresized

diese Funktionen:
- imagecreatetruecolor
- imagecopyresampled

So hatte ich das auch schon in deinem anderen Thread (im Webdesign-Forum) (http://www.forum-3dcenter.org/vbulletin/showthread.php?t=184234) beschrieben.

bye, mith

Snatch
2004-11-24, 14:29:27
Oh ja hab ich nicht mehr gelesen, aus welchem Grunde auch immer :(

Danke dir !

Hab noch ein kleines Problem. Mein Uploadscript mag große Dateien nicht. Mit kleinen geht alles 1A aber mit einer z.B. 1,5MB Datei klädt er ein stück hoch und meint dann das die Datei bereits existeirt. Er übergibt es nicht an das Thumbnail Sctript.

Hast du dazu auch einen rat ?


<?

/////////////////////////////////////////////////////////////////////
// File/Image Uploader //
// //
/////////////////////////////////////////////////////////////////////

// integrate into vbb
error_reporting(E_ALL & ~E_NOTICE);
require_once('./global.php');

// set usergroup can access this script
if (!in_array($bbuserinfo['usergroupid'], array(2,5,6,7,8,9,11)))
{ print_no_permission(); }

// uploader settings
//$dir = "C:/Inetpub/wwwroot"; // absolute path/dir where images are to be uploaded or /home/user/public_html/uploads for *nix
$dir = "/var/www/web1/html/images/member/";

$folder=date("Ymd");
$dir.="/".$folder;
if(!file_exists($dir)){mkdir($dir,0777);}

$ext = array(".gif", ".jpg", ".jpeg", ".png"); //allowed file extensions. To add more ext, use comma to seperate them
$filesize = "2048"; // max filesize allowed to upload (in KB)
$url = "http://pics.celebritymarkt.de/images/member/".$folder.'/'; // Full URL to your upload dir
$maxwidth = 5000; // for images only ... set this if you don't ppl to upload large images, breaking table cell of your forum.
$maxheight = 5000; // for images only

// initialize & vars declaration
$title = "All4A Image Uploader - powered by tnguy3n &copy; all4actions.net";
$header = "<font size=+1 color=darkgreen><b>Image Uploader</b></font>";
$msg = ""; // initialize
$imgurl = $url . $_FILES['img']['name'];
$timgurl = $url. 'thumb_'.$_FILES['img']['name'];
$dimension = @ getimagesize($_FILES['img']['tmp_name']);
$width = $dimension[0];
$height = $dimension[1];

if ($do == 'upload') {

if ($_FILES['img']['name'] == "") {
$msg = "<center><font color=\"red\">Bitte wähle das Bild aus für den Upload!</font></center>";
}

elseif (file_exists("$dir/".$_FILES['img']['name'])) {
$msg = "<center><font color=\"red\">Filename "."<b>". $_FILES['img']['name']."</b>" . " existiert bereits. Bitte benenne es um oder lade eine andere Datei hoch.</font></center>";
}

elseif (!in_array(strrchr($_FILES['img']['name'],'.'),$ext)) {
$msg = "<center><font color=\"red\">Dieser Dateityp ist nicht erlaubt!</font></center>";
}

elseif (($_FILES['img']['size']/1020) > $filesize) {
$msg = "<center><font color=\"red\">Die Datei ist zu groß für den Upload, <b>" . round($_FILES['img']['size']/1020) . " KB</b>. Ändere die größe oder lade eine andere Datei hoch.!</font></center>";
}

elseif (strrchr($_FILES['img']['name'],' ')) {
$msg = "<center><font color=\"red\">Der Dateinamen darf keine Leerzeichen enthalten!</font></center>";
}

elseif($width > $maxwidth || $height > $maxheight) {
$msg = "<center><font color=\"red\">The image you try to upload is too large, " . $dimension[0] . " x " . $dimension[1] . ". Max width x height: " . $maxwidth . " x " . $maxheight . "</font></center>";
}

else {
copy($_FILES['img'][tmp_name], "$dir/".$_FILES['img']['name']) or die("Couldn't Upload File. Check chmod of your upload dir, it must be writable.");
require_once('./script.php');
createThumb($dir.'/'.$_FILES['img']['name'], 200 , 200, $dir.'/thumb_'.$_FILES['img']['name']);

// wrap it up and print result
$msg = "<font color=red>Image <b>" . $_FILES['img']['name'] . "</b> has sucessfully uploaded!</font>";
eval('print_output("' . fetch_template('uploader_result') . '");');
exit;
}
}

eval('print_output("' . fetch_template('uploader') . '");');

?>

mithrandir
2004-11-25, 11:18:32
Dere!

Ein Upload könnte ja eigenltich nur serverseitig abgebrochen werden, oder? Vielleicht liegt es an Einstellungen deines Webservers *vermut* ...

bye, mith

flominator
2004-12-02, 10:25:33
Kann mir einer sagen wie ich das ändern muss damit es geht ?


Du könntest alternativ ImageMagick verwenden, falls es bei Dir auf dem Webserver läuft. Dann wird Dir diese Methode weiterhelfen:

// define the path to the ImageMagick Executable File (convert)
define("CONVERT_PATH","/usr/bin/convert");


/**
@brief verkleinert Bilder proportional zur angegebenen Breite
.

Besitzt ein Bild schon die richtige Größe, wird es ggf. an den Zielpfad kopiert
@param:$src Pfad der Quelldatei (kann relativ oder absolut angegeben werden)
@param:$dest Pfad der Zieldateie
@param:$twid Zielbreite
*/
function img_resize ($src, $dest, $twid)
{
//Unterscheidung zwischen absoluten und relativen Pfaden
switch(substr($src, 0, 1))
{
case "/":
{

}
case ".":
{
$str_file_path_phys = $src;
break;
}
default: //Unwandlung in einen relativen Pfad, der im aktuellen Ordner beginnt
{
$st r_file_path_phys=..$src
}
}

$str_file_path_www = "$src";

// thumbnail will be created from the file above,
// please set the thumbnail destination path:

switch(substr($dest, 0, 1))
{
case "/":
{

}
case ".":
{
$str_target_path_phys = $dest;
break;
}
default:
{
$str_target_path_phys = "./".$dest;
}
}

$str_target_path_www = $dest;

// Ermitteln der Bildmaße
$list_file_dimensions = getimagesize($str_file_path_phys);

// Bestimmen der Zielbreite
$int_target_width = $twid;

// Berechenen der Zielhöhe
$int_target_height = ($list_file_dimensions[0]/$twid)*$list_file_dimensions[1];

// verkleinern nötig?
if ($list_file_dimensions[0] > $int_target_width)
{
// create thumbnail from original file
exec(CONVERT_PATH ." -geometry ".$int_target_width."x".$int_target_height." ".$str_file_path_phys." ".$str_target_path_phys);
}

else //verkleinern unnötig!
{
if($str_file_path_phys!=$str_target_path_phys)
{
//kopieren der Bilddatei, falls der Pfad nicht identisch ist
copy($str_file_path_phys, $str_target_path_phys);
}
}
}