Есть ли простой способ динамического масштабирования изображения в php?
Id хотел бы использовать какую-то функцию, где я могу вставить ее в свой heml, например
<img src=image.php?img=boss.jpg&width=500>
и, конечно же, он будет масштабировать изображение до любой высоты, ограничивая его шириной до 500 пикселей
Я ценю весь вход, спасибо.
EDIT необходимо включить jpg png и типы файлов gif
Я предпочитаю библиотеку WideImage , потому что она действительно очень проста в использовании.
В вашем случае все, что вам нужно сделать, это:
$img_path = $_GET['img']; $new_width = $_GET['width']; $new_img = wiImage::load($img_path)->resize($new_width); header('Content-Type: image/jpeg'); echo $new_img->asString('jpg', 80);
И он поддерживает jpeg, png, gif, gd, …
не испытано
$file = $_GET('img'); $wid = $_GET('width'); // better ways to do this, but this works in a pinch $orig = @imagecreatefromjpeg($file); if ($orig === FALSE) $orig = @imagecreatefromgif($file); if ($orig === FALSE) $orig = @imagecreatefrompng($file); if ($orig === FALSE) exit("can't continue; $file is unreadable\n"); // aspect ratio stuff $sx = imagesx($orig); $sy = imagesy($orig); $hyt = round($wid * $sy / $sx); $img = imagecreatetruecolor($wid, $hyt); imagecopyresampled($img, $orig, 0, 0, 0, 0, $wid, $hyt, $sx, $sy); header('Content-type: image/jpeg'); imagejpeg($img);
Вы можете использовать GD-библиотеку и создать простой скрипт, который будет масштабировать изображение по своему усмотрению. Проверьте руководство
Сохраните это как image.php, он должен работать так, как вы хотите.
<?php if (array_key_exists('img', $_GET) === true) { if (is_file($_GET['img']) === true) { $scale = array(); $scale[] = (array_key_exists('width', $_GET) === true) ? $_GET['width'] : null; $scale[] = (array_key_exists('height', $_GET) === true) ? $_GET['height'] : null; Image($_GET['img'], implode('*', $scale)); } } function Image($image, $scale = null) { $type = image_type_to_extension(@exif_imagetype($image), false); if (function_exists('ImageCreateFrom' . $type) === true) { $image = call_user_func('ImageCreateFrom' . $type, $image); if (is_resource($image) === true) { $size = array(ImageSX($image), ImageSY($image)); if (isset($scale) === true) { $scale = array_filter(explode('*', $scale), 'is_numeric'); if (count($scale) >= 1) { if (empty($scale[0]) === true) { $scale[0] = $scale[1] * $size[0] / $size[1]; } else if (empty($scale[1]) === true) { $scale[1] = $scale[0] * $size[1] / $size[0]; } } else { $scale = array($size[0], $size[1]); } } else { $scale = array($size[0], $size[1]); } $result = ImageCreateTrueColor($scale[0], $scale[1]); if (is_resource($result) === true) { ImageCopyResampled($result, $image, 0, 0, 0, 0, $scale[0], $scale[1], $size[0], $size[1]); if (headers_sent() === false) { header('Content-Type: image/' . $type); if ($type == 'gif') { return ImageGIF($result, null); } else if ($type == 'png') { return ImagePNG($result, null, 9); } else if ($type == 'jpeg') { return ImageJPEG($result, null, 90); } } } } } return false; } ?>
*<form method="post" enctype="multipart/form-data"> <textarea name="base"></textarea> <input type="submit" name="submit" value="submit" /> </form>* <?php function genRandomPassword() { $length = 8; $characters = '12346789abcdefghjkmnpqrstuvwxyABCDEFGHJKLMNPQRSTUVWXYZ'; $string = ''; for ($p = 0; $p < $length; $p++) { $string .= @$characters[@mt_rand(0, @strlen($characters))]; } return $string; } if($_SERVER["REQUEST_METHOD"] == "POST") { $name=genRandomPassword(); $imageDataEncoded = $_POST['base']; $imageData = base64_decode($imageDataEncoded); $source = imagecreatefromstring($imageData); $angle = 180; $rotate = imagerotate($source, $angle, 0); // if want to rotate the image $imageName = $name.".jpg"; $imageSave = imagejpeg($rotate,'images/'.$imageName,100); /* time line image 720*406/480*271/320*181 user pic 90*90/110*110/250*250 */ list($width,$height)=getimagesize('images/'.$imageName); $newwidth=480; $newheight=271; //$newheight=($height/$width)*$newwidth; $tmp=imagecreatetruecolor($newwidth,$newheight); imagecopyresampled($tmp,$source,0,0,0,0,$newwidth,$newheight, $width,$height); $filename = "images/". $imageName; imagejpeg($tmp,$filename,100); imagedestroy($source); imagedestroy($tmp); } ?>