有没有一种简单的方法可以在 php 中动态缩放图像?
我想专门使用某种功能,我可以将它插入到我的 heml 中,例如
<img src=image.php?img=boss.jpg&width=500>
当然,它会将图像缩放到将其限制为 500px 宽的任何高度
我感谢所有输入,谢谢。
EDIT确实需要包含 jpg png 和 gif 文件类型
有没有一种简单的方法可以在 php 中动态缩放图像?
我想专门使用某种功能,我可以将它插入到我的 heml 中,例如
<img src=image.php?img=boss.jpg&width=500>
当然,它会将图像缩放到将其限制为 500px 宽的任何高度
我感谢所有输入,谢谢。
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,...
您可以使用 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);
将此保存为 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);
}
?>