ugrás a tartalomhoz

Képek arányos kicsinyítése PHP-ben

Anonymous · 2006. Jún. 19. (H), 18.17
Üdv!

Ha pl. van egy galériám, amiben 1 oldalon 100 képet jelenítek meg aminek a felbontása egyenként 1024x768 és egyenként 2 Megabájtot foglal és valaki lehívja ezt az nagyon sok idő mire betölt (200MB).

A méretet(felbontást) így kicsinyítettem: <img src="" width="100" border="0" />

De ugye ez csak a megjelenést befolyásolja...

De hogy tudok olyat php-ban, hogy lekicsinyítem 100 pixel-re a szélességét és ezzel arányosan csökken a magassás is, vagy azt is megadom(pl.: szélesség: 150 magassás: 100), és íígy csökken a mérete is pl.: 2Mb-ről 100Kb-ra.

A képek jpg formátumúak, de ha eltekintűnk a formátumtól akkor is ugyan ez lesz???

Előre is köszönöm a választ...
 
1

olvas még valaki php.net-et, vagy hasonlót?

winston · 2006. Jún. 19. (H), 18.22
erre van php függvény. usgyi a php.net. az arányokat meg úgy tarthatod meg, ha leosztod megfelelően a paramétereket. és lehetőleg feltöltéskor, és ne minden letöltéskor kicsinyítsd, mert különben zabálni fogja a szervert. ja, és ált. a kicsik csúnyák, de van rá függvény, amivel szebb lesz, elmossa.
2

én ezt használom

Anonymous · 2006. Jún. 19. (H), 18.33

<?php
if (array_key_exists('picture', $_GET)) {

		  $filename  = $_GET['picture'];
		  $type      = image_type_to_mime_type($filename);
		  list($width, $height) = getimagesize($filename);
	
		  $newHeight = 85;
		  $percent   = $newHeight  / $height;
		  $newWidth  = $width * $percent;
		  $newWidth  = ceil($newWidth);

		if ( ! exif_thumbnail($filename, $newWidth, $newHeight , $type) ) {
			$filename = "images/noth.jpg";
		        $image = imagecreatefromjpeg($filename);
		}
		else {
		  $image = exif_thumbnail($filename, $newWidth, $newHeight , $type);
		}
	}
	else {
		   $image = false;
	}

	if ($image !==false) {
		   header('Content-type: image/jpeg');
		   echo $image;
		   exit;
	}
	else {
		   print '<span class="errorText">no thumbnail available</span>';
	}

?>
Ezt lemented pl th.php néven, és utána <img src="th.php?picture=képurlje"> hívod meg.

Ez csak akkor működik, ha vannak exif függvények, amúgy

<?php

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

list($width, $height) = getimagesize($picture);

$newheight = 80;
$percent  = $newheight  / $height;
$newwidth = $width * $percent;

while ( $newwidth >= 120 ) {
	$newwidth = $newwidth / 1.1;
	$newheight = $newheight / 1.1;
}

$thumb = imagecreate($newwidth, $newheight);
$source = imagecreatefromjpeg($picture);


imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);


imagejpeg($thumb, '', 100);
?>
ezek jpg képekkel működnek, de ha imagecreateformpng függvényt hívsz meg, azzal is megy. Amúgy a második példa eléggé össze van dobva, szóval egy kicsit módosítsd rajta...
3

Egyzserű megoldás

mATTIAS · 2006. Jún. 19. (H), 18.47
Én az alábbiegyszerű kódot használom, ha nem karsz belemerülni:

így hivatkozz:

render.php?source=képelérése&x=400&y=300 , vagy más felbontással...

de egyre figyelj, ha ezt lefuttatod 20db képnél az eléggé leterheli a szervert, főlegha sokan látogatják, inkább mentsd el a kicsinyitettképeket...



<?php
//Fejlécként képet adunk vissza...
header('Content-type: image/jpeg');

$thumb = imagecreatetruecolor($x,$y);
list($width, $height) = getimagesize($source);
$source = imagecreatefromjpeg($source);

// Resize

imagecopyresized($thumb, $source, 0, 0, 0, 0, $x, $y, $width, $height);

// Output
imagejpeg($thumb);
?>
4

kerek feltalalasa meg1x

Anonymous · 2006. Jún. 19. (H), 19.48
Mint gyakorlatilag barmire erre is van kesz megoldas: phpthumb. Nyilvan neked kozel se kell ennyi funkcio, es tanulni tobbet tanulsz ha megcsinalod magad.

Ami igazabol fontos, hogy winstonnak nagyon igaza van abban, hogy erdemesebb feltolteskor megcsinalni az atmeretezest, hiszen csak 1x toltod fel mig ki tudja hanyszor toltik majde le a kepet. Ha mondjuk nem weben toltod fel (hanem pl ftp), akkor erdemes csinalni egy scriptet ami a feltett kepekre idonkent megcsinalja a thumbnailt.