ugrás a tartalomhoz

Kép méretarányos átméretezése PHP-vel

Anonymous · 2006. Jan. 4. (Sze), 15.39
Sziasztok!
nekem olyan kérdésem lenne, hogy hogyan lehet php-vel kép méretét méretarányosan csökkenteni? lehet-e ilyet? és ha igen, hogyan?
előre is thx.
 
1

width

Anonymous · 2006. Jan. 4. (Sze), 16.01
A képnek nem adod meg csak a szélességét:
<?php
$kep_forras = "valami.jpg";
$szelesseg = "100";
echo "<img src=" . $kep_forras . " width=" . $szelesseg . " alt='Kép' title='Kép'>";
4

Hibás!

janoszen · 2006. Jan. 4. (Sze), 16.58
Ez egy nagyon gyakran elkövetett, nagyon félreértett és legfőképpen nagyon rossz megoldás.

Ha egy 1600 pixel széles képet így méretezel le 16 pixelre, akkor is le kell töltenie a felhasználónak az 1600 pixelnek megfelelő adatmennyiséget és csak utólag mérezeti át.

Nagyon nagyon nagy kezdő-baki, jó lenne nem elkövetni.
2

<Nincs cím>

fberci · 2006. Jan. 4. (Sze), 16.18
Természetesen lehet. Megnézed, hogy mennyi az eredeti kép széllessége és magassága, majd kiszámítod, hogy mennyire csökkented le mindkét oldalát. Ezt úgy tudod megtenni, hogy kiszámolod, hogy az egyik oldalt mekkorára kicsinyítetted le, és ez hogy aránylik az eredeti oldalhoz, és ugyanebben az arányban kicsinyíted le a másik oldalt is.

Itt egy példakód, amelyet én használok (meg kell adnod nekia képfájl helyét, hogy mekkora lehet a legnagyobb oldal, és az új fájl nevét):

<?php
function kepgenerator ($kepfajl, $maxmeret, $ujfajlnev)
	{
	if (!file_exists($kepfajl))
		return (false);
	
	// Megfelelő méret kiválasztása
	list($width, $height, $type) = getimagesize($kepfajl);
	$nagyobb = ($width > $height) ? $width : $height;
	$kisebb = ($width > $height) ? $height : $width;
	if ($nagyobb <= $maxmeret)
		{
		$new_nagyobb = $nagyobb;
		$new_kisebb = $kisebb;
		}
	else
		{
		$szorzo = $maxmeret / $nagyobb; // Mennyire (milyen aránnyal) kicsinyítjük le a képet - ez egy 0 és 1 közötti szám lesz
		$new_nagyobb = $maxmeret; // A nagyobb oldalszélesség lesz a maximális
		$new_kisebb = $kisebb * $szorzo; // A nagyobb oldalméret kicsinyítésével ($szorzo) arányosan kicsinyítjük le a kisebb oldalt is
		}
	$new_width = ($width > $height) ? $new_nagyobb : $new_kisebb; // Az eredeti méretek alapján összepárosítjuk az új szélességet és magasságot a kissebb-nagyobb értékekkel
	$new_height = ($width > $height) ? $new_kisebb : $new_nagyobb;
	
	// Kép generálása
	switch ($type) // A kép formátumától függően más-más függvénnyel dolgozzuk fel a képet
		{
		case 1:
			$kep = imagecreatefromgif ($kepfajl);
			break;
		case 2:
			$kep = imagecreatefromjpeg ($kepfajl);
			break;
		case 3:
			$kep = imagecreatefrompng ($kepfajl);
			break;
		}
	$ujkep = imagecreatetruecolor ($new_width, $new_height);
	imagecopyresampled ($ujkep, $kep, 0, 0, 0, 0, $new_width, $new_height, $width, $height); // A lényeg - most generáljuk az új képet
	imagejpeg ($ujkep, $ujfajlnev, 100); // És végül egy (lehető legjobb minoségű) jpeg képet generálunk az egészből, és azt elmentjük a megadott néven
	return (array($new_width, $new_height)); // Visszaadjuk a generált kép szélességét és magasságát
	}
?>
Üdv.: fberci
3

lehet

talger · 2006. Jan. 4. (Sze), 16.28
van egy képed, megnézed melyik oldala hosszabb. Ezt az oldalt elosztod a leendő hosszával, így kapsz egy 1nél nagyobb számot (kicsinyítésnél). Majd ezzel a számmal elosztod a másik oldalt és megkapod az új másik oldalt.


itt pedig vannak a szükséges függvények http://hu.php.net/image
5

régi téma - ÚJ EMBER

Mikulasche · 2014. Aug. 13. (Sze), 15.20
Most jutottam ide a tanulmányaimban.
Amit tudok ezzel kapcsolatban megosztom.
Ha meg nem jól tudom javítsatok ki.
/imádok 9éves témákat életre kelteni /

Kép méretarányos átméretezése
$kepnev = "filocskam.jpg";
$kep = getimagesize($kepnev);
$ujszel = 1000;
$ertek = $kep[0]/$ujszel;
$ujmag = round($kep[1]/$ertek,0);
$ujkep = imagecreatetruecolor($ujszel, $ujmag);
$er_kep = imagecreatefromjpeg($kepnev);
imagecopyresampled($ujkep, $er_kep, 0, 0, 0, 0, $ujszel, $ujmag, $kep[0],$kep[1]);
imagejpeg($ujkep, $kepnev, 93);


Minden oldalaránynál, kicsinyítéshez és nagyításhoz is működik.