hallo iedereen...

ik zit met een probleem met het maken van thumbnails....
Bij sommige foto's doet hij alles perfect en bij andere geeft hij gewoon niks weer... iemand een idee hoe dat komt?

hier het scriptje wat aangeroepen wordt:


<?
$bestand = $_GET['bestand']; 
$new_width = 150; //
$new_height = 150; //
global $convert;
global $ImageTool;
$imgsize = GetImageSize($bestand);
$width = $imgsize[0];
$height = $imgsize[1];
if ($width > $height) { // If the width is greater than the height it's a horizontal picture
  	$xoord = ceil(($width - $height) / 2 );
   	$width = $height;      // Then we read a square frame that equals the width
} 
else {
   	$yoord = ceil(($height - $width) / 2);
   	$height = $width;
}
$new_im = ImageCreatetruecolor($new_width,$new_height);
$im = ImageCreateFromJPEG($bestand);
imagecopyresampled($new_im,$im,0,0,$xoord,$yoord,$new_width,
$new_height,$width,$height);
header("Content-type: image/jpeg"); 
imagejpeg($new_im,'',100); 
?>


thanx
Kun je iets noukeuriger zijn? Bij wlke foto's werkt het wel, en bij welke niet? Als ik je code zie, denk ik dat het aan dit stuk ligt:
$im = ImageCreateFromJPEG($bestand);

Is het bestand wel een jpg? niet een png of een gif? Je zou een stuk code moeten schrijven om te controleren met wat voor soort bestand je te maken hebt, ongeveer zoiets:


$type=imgsize[2];
if($type==="IMAGETYPE_GIF") $im=imagecreatefromgif($bestand);
elseif($type==="IMAGETYPE_JPEG") $im=imagecreatefromjpeg($bestand);
elseif($type==="IMAGETYPE_PNG") $im=imagecreatefrompng($bestand);
else die("Geen afbeelding!");


Als het daar niet aan ligt zou ik het niet weten... Hopelijk werkt het zo.
de extensie moet hetzelfde zijn als het type, dus extensie veranderen heeft geen zin. als dit het probleem zou zijn
yorick17 schreef op 13.08.2009 19:32
de extensie moet hetzelfde zijn als het type, dus extensie veranderen heeft geen zin. als dit het probleem zou zijn


Je veranderd ook niet de extensie, maar png/jpeg, gif en bmp worden anders opgeslagen. Omdat php het bestand omzet naar een variable om mee te werken (zal waarschijnlijk een array zijn met pixels, en pixelkleuren) moet elke file dus anders ingelezen worden. Ik heb png en jpeg bij elkaar staan omdat deze op ongeveer dezelfde manier ingelezen kunnen worden, maar gif is een heel ander verhaal. Verander de extensie van een .jpeg maar eens naar .png, als het goed is zou je de afbeelding nogsteeds moeten kunnen lezen, maar als je hem veranderd naar .gif dan leest hij hem niet meer (bij mijn windows 7 RTM tenminste). Daarom doe je het, en niet om te controleren of de extensie wel goed is.
Ik zie op beide linken een foto. Echter is de een een beetje (erg) groot.
weet er iemand of er een max grote op 1 van die functies zit dan? want dan zet ik een max height en width op de upload
He hierbij een volledig script om je te matsen:

functions.php


<?php
function CreateImage($foto, $thumb, $logo, $maxfoto_b, $maxfoto_h, $maxthumb_b, $maxthumb_h) {

	// ---- Resizen afbeedling ----
	if(file_exists($foto)) {
		ResizeImage($foto, $maxfoto_b, $maxfoto_h);
	}

	// ---- Watermerk op afbeelding ----
	if(file_exists($logo)) {
		WatermarkOnImage($foto, $logo);
	}

	// ---- Thumbnail maken ----
	if(!real_empty($thumb)) {
		CreateThumbnail($foto, $thumb, $maxthumb_b, $maxthumb_h);
	}

	// ---- Watermerk op thumbnail ----
	if(file_exists($logo)) {
		WatermarkOnImage($thumb, $logo);
	}

}

function ResizeImage($foto, $maxfoto_b, $maxfoto_h) {

	// Krijg informatie over afbeelding
	$afbeeldinginfo = getimagesize($foto);
	$orgfoto_b = $afbeeldinginfo[0];
	$orgfoto_h = $afbeeldinginfo[1];

	// ---- Resizen van afbeelding -----

	if($orgfoto_b > $maxfoto_b || $orgfoto_h > $maxfoto_h) {
		// bepaal de factoren
		if($orgfoto_b / $orgfoto_h > $maxfoto_b / $maxfoto_h) {
			// org_b > maxfoto_b is de breedte bepalend
			$newfoto_b = $maxfoto_b;

			// hoogte berekenen
			$factor = $orgfoto_b / $maxfoto_b;
			$newfoto_h = round($orgfoto_h / $factor);

		} else {
			// orgfoto_h > maxfoto_h is de hoogte bepalend
			$newfoto_h = $maxfoto_h;

			// breedte berekenen
			$factor = $orgfoto_h / $maxfoto_h;
			$newfoto_b = round($orgfoto_b / $factor);
		}

	} else {
		// het past
		$newfoto_b = $orgfoto_b;
		$newfoto_h = $orgfoto_h;
	}

	// open  original afbeelding
	$old_foto = imagecreatefromjpeg($foto);

	// maak een tijdelijke afbeelding met nieuwe b en h
	$new_foto = imagecreatetruecolor($newfoto_b, $newfoto_h);

	// maak een nieuwe afbeedling
	imagecopyresampled($new_foto, $old_foto, 0, 0, 0, 0, $newfoto_b, $newfoto_h, $orgfoto_b, $orgfoto_h);

	// opslaan
	imagejpeg($new_foto, $foto);

	// opschonen geheugen
	imagedestroy($old_foto);
	imagedestroy($new_foto);

}

function WatermarkOnImage($foto, $logo) {

	// Krijg informatie over afbeelding
	$afbeeldinginfo = getimagesize($foto);
	$orgfoto_b = $afbeeldinginfo[0];
	$orgfoto_h = $afbeeldinginfo[1];

	// Krijg informatie over watermerk
	$logoinfo = getimagesize($logo);
	$logo_b = $logoinfo[0];
	$logo_h = $logoinfo[1];

	//watermerk aanpassen aan breedte afbeelding
	if($logo_b > $orgfoto_b) {
		// logo_b > org_b is de breedte bepalend
		$newlogo_b = $orgfoto_b;

		// hoogte berekenen
		$factor = $logo_b / $orgfoto_b;
		$newlogo_h = round($logo_h / $factor);
	} else {
		// het past
		$newlogo_b = $logo_b;
		$newlogo_h = $logo_h;
	}

	// open afbeelding (watermerk)
	$old_waterlogo = imagecreatefrompng($logo);
	// maak een tijdelijke afbeelding (watermerk) met nieuwe b en h
	$new_waterlogo = imagecreatetruecolor($newlogo_b, $newlogo_h);

	// maak een nieuwe afbeedling (watermerk)
	imagecopyresampled($new_waterlogo, $old_waterlogo, 0, 0, 0, 0, $newlogo_b, $newlogo_h, $logo_b, $logo_h);

	// open originele afbeelding
	$watermerk = imagecreatefromjpeg($foto);

	// positie watermerk
	$waterlogo_x = $orgfoto_b - $newlogo_b;
	$waterlogo_y = $orgfoto_h - $newlogo_h;

	// maak een nieuwe afbeedling met watermerk
	imagecopymerge($watermerk, $new_waterlogo, $waterlogo_x, $waterlogo_y, 0, 0, $newlogo_b, $newlogo_h, 100);

	// opslaan
	imagejpeg($watermerk, $foto);

	// opschonen geheugen
	imagedestroy($watermerk);
	imagedestroy($old_waterlogo);
	imagedestroy($new_waterlogo);

}

function WatermarkStringOnImage($foto, $copyrightstring) {

	// krijg informatie over afbeelding
	$afbeeldinginfo = getimagesize($foto);
	$orgfoto_b = $afbeeldinginfo[0];
	$orgfoto_h = $afbeeldinginfo[1];

	// open originele afbeelding
	$watermerk = imagecreatefromjpeg($foto);

	// positie watermerk
	$waterlogo_x = 10;
	$waterlogo_y = $orgfoto_h - 10;

	// lettertype en kleure copyright
	$coprightlettertype = 1;
	$copyrightkleur = 0;

	// plaats de copyright op de afbeedling
	imagestring($watermerk, $coprightlettertype, $waterlogo_x, $waterlogo_y, $copyrightstring, $copyrightkleur);

	// opslaan
	imagejpeg($watermerk, $foto);

	// opschonen geheugen
	imagedestroy($watermerk);

}


function CreateThumbnail($foto, $thumb, $maxthumb_b, $maxthumb_h) {

	// Krijg informatie over afbeelding
	$afbeeldinginfo = getimagesize($foto);
	$orgfoto_b = $afbeeldinginfo[0];
	$orgfoto_h = $afbeeldinginfo[1];

	// Afbeelding aanpassen (resize)
	if($orgfoto_b > $maxthumb_b || $orgfoto_h > $maxthumb_h) {

		// bepaal de factoren
		if($orgfoto_b / $orgfoto_h > $maxthumb_b / $maxthumb_h) {

			// newfoto_b > maxthumb_b is de breedte bepalend
			$newthumb_b = $maxthumb_b;

			// hoogte berekenen
			$factor = $orgfoto_b / $maxthumb_b;
			$newthumb_h = round($orgfoto_h / $factor);

		} else {
			// newfoto_h > maxthumb_h is de hoogte bepalend
			$newthumb_h = $maxthumb_h;

			// breedte berekenen
			$factor = $orgfoto_h / $maxthumb_h;
			$newthumb_b = round($orgfoto_b / $factor);
		}

	} else {
		// het past
		$newthumb_b = $orgfoto_b;
		$newthumb_h = $orgfoto_h;
	}

	// open afbeelding
	$old_thumbnail = imagecreatefromjpeg($foto);

	// maak een tijdelijke afbeelding met nieuwe b en h
	$new_thumbnail = imagecreatetruecolor($newthumb_b, $newthumb_h);

	// maak een nieuwe afbeedling
	imagecopyresampled($new_thumbnail, $old_thumbnail, 0, 0, 0, 0, $newthumb_b, $newthumb_h, $orgfoto_b, $orgfoto_h);

	// opslaan
	imagejpeg($new_thumbnail, $thumb);

	// opschonen geheugen
	imagedestroy($old_thumbnail);
	imagedestroy($new_thumbnail);
}

// is string echt leeg
function real_empty($string, $spaces_allowed = true) {

	// verwijder spaties
	if (!$spaces_allowed) {
		$string = trim($string);	
	}
    
	// is leeg of niet
	if(isset($string) && strlen($string)) {
		return false;
	} else {
		return true;
	}
}
?>


site.php


<?php
nieuw_plaatje = CreateImage("test.jpg", "tumb_test.jpg", "watermerk.png", 600, 400, 100, 75);
?>


Je kunt ook de functies afzonderlijk gebruiken
ik las ergens dat het kan dat afbeeldingen te groot zijn... maar dat je dit kan aanpassen in je php.ini file...

ik host een server bij combell... weet iemand hoe ik dit oplos?
SanThe schreef op 13.08.2009 22:25
Ik zie op beide linken een foto. Echter is de een een beetje (erg) groot.

De 'grootste' is slechts 300Kb, maar groot van omvang. Ik moet dus scrollen om alles te kunnen zien.
De uploadsize van een server staat vaak op 2MB.
uhu maar het valt me ook op dat alle afbeeldingen die niet worden weergegeven redelijk groot zijn

wat meer voorbeelden die het niet doen:
http://jep-nv.be/new2/images/Badgel%20wild%20clove2800.jpg
http://jep-nv.be/new2/images/jepnvhlbujivyhb.JPG
http://jep-nv.be/new2/images/Badgel%20tangy%20citrus.JPG64400.JPG
http://jep-nv.be/new2images/Badgel%20ocean%20blue.JPG64500.JPG
http://jep-nv.be/new2/images/Counter%20display%20verwengel%20264800.jpg
http://jep-nv.be/new2/images/Verwengel%20spearmint2403.jpg

deze doen het perfect:
http://jep-nv.be/new2/images/21963780.jpg
http://jep-nv.be/new2/images/Love%20essentials1500.jpg
http://jep-nv.be/new2/images/tt_tangerine_cream_lg3100.jpg
http://jep-nv.be/new2/images/Massageolie%20cherry%20almond600.jpg
http://jep-nv.be/new2/images/Massageolie%20serenity1012.jpg
http://jep-nv.be/new2/images/tt_strawberry_cream_lg3105.jpg

de files worden allemaal via php geupload naar de server dus die uploadsize moet denk ik wel goed zijn...

Reageren