01. april 2005 - 00:02
Der er
5 kommentarer og 1 løsning
Resize og resample i én funktion
Jeg har følgende 2 PHP-script: resize.php: <?php header("Content-type: image/jpeg"); $filename = $_GET["img"]; $percent = 0.5; list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; if ($_GET["percent"] != "") { $newwidth = $width * $_GET["percent"]; $newheight = $height * $_GET["percent"]; } elseif (isset($_GET["width"]) && isset($_GET["height"])) { $newwidth = $_GET["width"]; $newheight = $_GET["height"]; } elseif (isset($_GET["width"])) { $newwidth = $_GET["width"]; $newheight = $height * $newwidth / $width; } elseif (isset($_GET["height"])) { $newheight = $_GET["height"]; $newwidth = $width * $newheight / $height; } $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); imagejpeg($thumb); ?> resample.php: <?php header("Content-type: image/jpeg"); $size = array("w" => $_GET["size_w"], "h" => $_GET["size_h"]); $pos = array("x" => $_GET["pos_x"], "y" => $_GET["pos_y"]); $orig = imagecreatefromjpeg($_GET["img"]); $copy = imagecreatetruecolor($size["w"], $size["h"]); imagecopyresampled($copy, $orig, 0, 0, $pos["x"], $pos["y"], $size["w"], $size["h"], $size["w"]+$pos["x"], $size["h"]+$pos["y"]); imagejpeg($copy); ?> Er det muligt at kombinere de ovenstående scripts (eller ved en helt 3. funktion) således, at man ved hjælp af kun 1 funktion først kan resize et billede og derefter hente en bid af det resizede billede? Jeg har f.eks. en billede på 700X700 pixel. Det skal så først resizes til 200X200 pixel, hvorefter der skal hentes de miderste 100X100 pixel, der endelig skal vises i browseren. Håber det er forståeligt.
Annonceindlæg fra Barco
03. april 2005 - 01:08
#1
<?php header("Content-type: image/jpeg"); $filename = $_GET["img"]; $percent = 0.5; list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; if ($_GET["percent"] != "") { $newwidth = $width * $_GET["percent"]; $newheight = $height * $_GET["percent"]; } elseif (isset($_GET["width"]) && isset($_GET["height"])) { $newwidth = $_GET["width"]; $newheight = $_GET["height"]; } elseif (isset($_GET["width"])) { $newwidth = $_GET["width"]; $newheight = $height * $newwidth / $width; } elseif (isset($_GET["height"])) { $newheight = $_GET["height"]; $newwidth = $width * $newheight / $height; } $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); header("Content-type: image/jpeg"); $size = array("w" => $_GET["size_w"], "h" => $_GET["size_h"]); $pos = array("x" => $_GET["pos_x"], "y" => $_GET["pos_y"]); $orig = imagejpeg($thumb); $copy = imagecreatetruecolor($size["w"], $size["h"]); imagecopyresampled($copy, $orig, 0, 0, $pos["x"], $pos["y"], $size["w"], $size["h"], $size["w"]+$pos["x"], $size["h"]+$pos["y"]); imagejpeg($copy); ?> Du må ikke hænge mig op på om det virker.
03. april 2005 - 01:09
#2
Du skal selvfølgelig ikke have 2 x header <?php header("Content-type: image/jpeg"); $filename = $_GET["img"]; $percent = 0.5; list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; if ($_GET["percent"] != "") { $newwidth = $width * $_GET["percent"]; $newheight = $height * $_GET["percent"]; } elseif (isset($_GET["width"]) && isset($_GET["height"])) { $newwidth = $_GET["width"]; $newheight = $_GET["height"]; } elseif (isset($_GET["width"])) { $newwidth = $_GET["width"]; $newheight = $height * $newwidth / $width; } elseif (isset($_GET["height"])) { $newheight = $_GET["height"]; $newwidth = $width * $newheight / $height; } $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); $size = array("w" => $_GET["size_w"], "h" => $_GET["size_h"]); $pos = array("x" => $_GET["pos_x"], "y" => $_GET["pos_y"]); $orig = imagejpeg($thumb); $copy = imagecreatetruecolor($size["w"], $size["h"]); imagecopyresampled($copy, $orig, 0, 0, $pos["x"], $pos["y"], $size["w"], $size["h"], $size["w"]+$pos["x"], $size["h"]+$pos["y"]); imagejpeg($copy); ?>
03. april 2005 - 13:42
#3
Jeg har gemt din funktion som "resize_resample.php" i samme mappe som filen, der kalder funktionen. Jeg kalder den nye funktion på følgende måde: <img src="resize_resample.php?img=0015.jpg&width=200&size_w=100&size_h=100&pos_x=50&pos_y=0" /> Men den viser ikke noget billede. Hvad kan der være galt?
03. april 2005 - 18:01
#4
hvis det er lavet om til en funktion så skal du bruge return imagejpeg($copy), er jeg overbevist om. Jeg har desværre ikke adgang til noget sted med GDLIB, så det er rent gætteri.
04. april 2005 - 00:47
#5
Det virker desværre heller ikke efter hensigten. Jeg må håbe, at nogle andre kigger forbi spørgsmålet ved lejlighed....
04. april 2005 - 17:46
#6
Efter at have læst mig igennem dokumentationen for imagecopyresampled() og forsøgt mig lidt frem, fandt jeg selv løsningen. Jeg lavede lidt om i en af mine tidligere postede funktioner. resample.php: <?php header("Content-type: image/jpeg"); $size = array("w" => $_GET["size_w"], "h" => $_GET["size_h"]); $pos = array("x" => $_GET["pos_x"], "y" => $_GET["pos_y"]); $filename = "sti_til_mappe/" . $_GET["img"]; if ($_GET["resize"] == "1") { list($width, $height) = getimagesize($filename); if ($width < $height) { $orig_dimensions = $width; } else { $orig_dimensions = $height; } } $orig = imagecreatefromjpeg($filename); $copy = imagecreatetruecolor($size["w"], $size["h"]); imagecopyresampled($copy, $orig, 0, 0, $pos["x"], $pos["y"], $size["w"], $size["h"], $orig_dimensions - $pos["x"], $orig_dimensions - $pos["y"]); imagejpeg($copy); ?> Jeg kaldte så funktionen således: <img alt="" src="resample.php?img=0001.jpg&size_w=100&size_h=100&pos_x=0&pos_y=0&resize=1" /> Det giver en thumbnail, hvor den korteste af siderne i det oprindelige billede bliver resizet ned til 100px, mens den længste side tilskæres, så den også kun bliver 100px. Ønskes anden bredde/højde end 100px, kan blot ændres i kaldet (...&size_w=100&size_h=100...). Så får thumbnailen en anden størrelse. Ønskes det ikke, at det oprindelige billede bliver resizet, kaldes funktionen blot således: <img alt="" src="resample.php?img=0001.jpg&size_w=100&size_h=100&pos_x=50&pos_y=50" /> Her hentes en bid i original størrelse af billedet på 100px X 100px fra pixel x=50 og y=50. ---- o0o ---- Jeg ændrede efterfølgende også i min postede resize-funktion. resize.php: <?php header("Content-type: image/jpeg"); $filename = "sti_til_mappe/" . $_GET["img"]; list($width, $height) = getimagesize($filename); if ($_GET["percent"] != "") { $newwidth = $width * $_GET["percent"]; $newheight = $height * $_GET["percent"]; } elseif (isset($_GET["width"]) && isset($_GET["height"])) { $newwidth = $_GET["width"]; $newheight = $_GET["height"]; } elseif (isset($_GET["width"])) { $newwidth = $_GET["width"]; $newheight = $height * $newwidth / $width; } elseif (isset($_GET["height"])) { $newheight = $_GET["height"]; $newwidth = $width * $newheight / $height; } elseif (isset($_GET["width_height"])) { if ($width > $height) { $newwidth = $_GET["width_height"]; $newheight = $height * $newwidth / $width; } else { $newheight = $_GET["width_height"]; $newwidth = $width * $newheight / $height; } } $copy = imagecreatetruecolor($newwidth, $newheight); $orig = imagecreatefromjpeg($filename); imagecopyresized($copy, $orig, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); imagejpeg($copy); ?> Nu kan følgende hentes med funktionen: - procentmæssig resize: <img alt="" src="resize.php?img=0001.jpg&percent=0.5" /> - låst bredde - højden tilpasses: <img alt="" src="resize.php?img=0001.jpg&width=100" /> - låst højde - bredden tilpasses: <img alt="" src="resize.php?img=0001.jpg&height=100" /> - låst bredde og højde - billedet får formentlig ikke de originale proportioner: <img alt="" src="resize.php?img=0001.jpg&width=100&height=100" /> - lås den største af enten bredde eller højde - den mindste tilpasses: <img alt="" src="resize.php?img=0001.jpg&width_height=100" /> Håber andre kan få hjælp af ovenstående. Hold jer muntre derude!
Vi tilbyder markedets bedste kurser inden for webudvikling