gedeelte van image uitknippen

Status
Niet open voor verdere reacties.

wake

Gebruiker
Lid geworden
21 aug 2007
Berichten
195
hallo,

ik heb een upload + resize script gemaakt, werkt perfect.

nou heb ik het probleem alleen dat hij bij mijn thumbnail fotos een bepaald stuk uit de foto pakt moet worden zonder dat het uitgerekt of iets word. (152px bij 114px)

weet iemand zo welke image functies ik hiervoor moet gebruiken? :rolleyes:
 
Waarom zou iets vertekend worden? Je hebt toch een resizer?

Als je daarmee uitgerekte foto's krijgt dan ligt dat aan je resize-functie.
 
Waarom zou iets vertekend worden? Je hebt toch een resizer?

Als je daarmee uitgerekte foto's krijgt dan ligt dat aan je resize-functie.


het probleem is het volgende,

ik wil fotos van 152px bij 114 px.. als ik nou lange fotos heb in plaats van brede, en ik resize die lange fotos naar 152px bij 114px dan word hij misvormt.

als dat het geval is moet hij de breedte pakken, 152px en dan de hoogte in het zelfde formaat meenemen, dat lukt..

maar die hoogte is groter dan 114 dan moet hij van die foto 114px hoog uit het midden knippen.

snappie? beetje lastig uit te leggen..
 
Wanneer je gewoon je resizer zo aanpast dat hij de aspect-ratio behoudt is er niets aan de hand:(
 
ik houd de aspect-ratio aan. maarja jij snapt denkik niet wat ik bedoel..

kijk maaris naar dit:
http://www.dumpert.nl/plaatjes/

die thumbnail is 100x100 px,,,, dit is een stukje uitgeknipt uit het plaatje op die op de pagina staat die ernaa kom als je er op klikt..

zo wil ik dat ook

dus:
iedere foto met wat voor formaat dan ook moet een stuk van het plaatje thumbnail worden van 152 px breed en 114px hoog, dus zonder de uitgerekt te worden
 
Je kunt geen aspect-ratio aanhouden en met uitgerekte afbeeldingen komen te zitten.

Gewoon je resizer aanpassen dat hij de lengte en de breedte van het origineel pakt, dan moet je kijken hoeveel procent 152 van de lengte is en 114 van de breedte.

Vervolgens het laagste percentage toepassen op de originele foto en zorgen dat hij een thumbnail van 152x114 heeft gemaakt.
 
Je kunt geen aspect-ratio aanhouden en met uitgerekte afbeeldingen komen te zitten.

Gewoon je resizer aanpassen dat hij de lengte en de breedte van het origineel pakt, dan moet je kijken hoeveel procent 152 van de lengte is en 114 van de breedte.

Vervolgens het laagste percentage toepassen op de originele foto en zorgen dat hij een thumbnail van 152x114 heeft gemaakt.

goh..
 
bedankt voor je meedenken.. maarja, dat doet mijn resizer dus al.

zie mijn bijgevoegd plaatje,

kijk, jij bedoelt wat er gebeurt bij foto 2 fout. dat heb ik nu.. maar alle fotos met wat voor aspect-ratio dan ook moeten zonder uitgerekt te worden hetzelfde formaat worden.. er moet dus bij verticaal lange fotos een stuk worden weggeknipt.. (zie foto 2 goed (half doorzichtig moet je weg denken))

is hier een php functie voor om zo een stuk uit een foto te knippen?
 

Bijlagen

  • imageresize.jpg
    imageresize.jpg
    81,1 KB · Weergaven: 30
Laatst bewerkt:
Dus je resizer doet net zoiets als deze:
PHP:
function resizer($imgSrc, $maxWidth, $maxHeight) {
  // Make sure we have a resource
  $imgSrc = imagecreatefromjpeg($imgSrc);
  // Get the image width & height
  $width = imagesx($imgSrc);
  $height = imagesy($imgSrc);
  
  // Calculate the difference accoarding to the maxWidth
  $percentage = ($maxWidth/$width);
  $new_width = $width * $percentage;
  $new_height = $height * $percentage;
  
  $image_p = imagecreatetruecolor($maxWidth, $maxHeight);
  // If in portrait make sure the image is centered
  $x_dest = ($width < $height) ? ($maxHeight*-0.5) : 0;
  imagecopyresampled($image_p, $imgSrc, 0, $x_dest, 0, 0, $new_width, $new_height, $width, $height);
  return imagejpeg($image_p, null, 100);
  imagedestroy($image_p);
}

In combinatie met deze aanroep doet de resizer bij het juiste werk...
PHP:
$img = "IMG_3918.JPG"; //Portait
$img2 = "IMG_3922.JPG"; //Landscape
$maxW = 152;
$maxH = 114;

header('Content-type: image/jpeg');
resizer($img, $maxW, $maxH);
Deze output een foto in het bestand, logischerwijs kun je natuurlijk ook de functie gebruiken om thumbnails in een map te drukken...

Dit is de manier die ik je probeer duidelijk te maken...
 
Laatst bewerkt:
dankje, ik zie nou waar het hem in zit.. ik was een beetje onduidelijk met mn vraagstelling..

dit was mn resize.php script:
PHP:
<?php


function makeimage($filename,$image_type,$newfilename,$path,$longside) {

ini_set('memory_limit', '256M');

$factor = 0;

	$image_type1 = strtolower(strstr($image_type, '.'));
	
		switch($image_type1) {
			case '.jpg':
				$source = imagecreatefromjpeg($filename);
				break;
			case '.png':
				$source = imagecreatefrompng($filename);
				break;
			case '.gif':
				$source = imagecreatefromgif($filename);
				break;
			default:
				echo("Error Invalid Image Type");
				die;
				break;
			}
	
	$fullpath = $path . $newfilename . $image_type;
	$thumb_fullpath = $path . 'thumb/thumb_' . $newfilename . $image_type;
	
	
	list($width, $height) = getimagesize($filename);

if (($width > $longside) || ($height > $longside)){
	if ($width > $height) {
		$factor = $width / $longside;
		$newheight = $height / $factor;
		$newwidth = $longside;
		}
	else {
		$factor = $height / $longside;
		$newwidth = $width / $factor;
		$newheight = $longside;}
	}
else{
	$newheight = $height;
	$newwidth = $width;
	}

$thumb_newheight = 114;	
	
if ($height > $width){
$thumb_newwidth = 75;}
else {
$thumb_newwidth = 152;
}
	
	$newpic = imagecreatetruecolor($newwidth, $newheight);
	$thumb_newpic = imagecreatetruecolor($thumb_newwidth, $thumb_newheight);

	ImageCopyResampled($newpic, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
	ImageCopyResampled($thumb_newpic, $source, 0, 0, 0, 0, $thumb_newwidth, $thumb_newheight, $width, $height);

	imagejpeg($newpic, $fullpath, 90);
	imagejpeg($thumb_newpic, $thumb_fullpath, 90);


	return $fullpath;
}

?>

en roep hem zo aan:
PHP:
include("resize.php"); 
makeimage($file['tmp_name'],$file['name'],$number,'upload/',520);

voor de gewoone afbeeldingen is hij goed.. maar bij die thumbnails moest ik het dus veranderen..

thx:thumb:

edit:
is het slim om dat image destroy er ook achter te zetten?

.
 
Laatst bewerkt:
Is je vraag nou opgelost?

Ik zie dat je best veel berekeningen op de width en height uitvoert, veel meer dan in mijn script. Terwijl je dus met het aantal in mijn script al resultaat hebt.

Daarnaast zit de truc hem in mijn variabele $x_dest, die zorgt er voor dat wanneer je een portrait-foto hebt de afbeelding wel vanaf het midden in de 152x114 afbeelding komt.

edit: imagedestroy() zorgt er voor dat die tijdelijke image weer verwijderd wordt, daardoor krijg je het geheugen (als het goed is) weer terug
 
dankje:thumb::D, k heb nog geen tijd gehad om het te testen maar ga er van uit dat het werkt!

i is een scriptje voor een school project waar niet in de source gekeken word dus ik had het maar snel in elkaar gezet zonder veel na te denken.. vandaar :p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan