PHP-php 优质制作缩略图
php制作缩略图,上传头像,不能裁剪,如果传的图的长宽比例不好,图片会变形,要怎么解决
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
php制作缩略图,上传头像,不能裁剪,如果传的图的长宽比例不好,图片会变形,要怎么解决
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
缩略图的比例和长宽是否是固定的?
从描述上来看,应该是上传的图片比例与缩略图的比例不符,导致变形吧。
想要缩略图不变形,却又不能裁剪;那就只能加黑边之类的了。如果条件允许,也可以让图像以原比例显示,就不会变形了。
一般来说可以从中心位置剪切,不会对原图有太大的破坏性影响,可以参考我的项目EvaCloudImage中的图片剪切一节
最近我也在做这个快的东西,图片质量只要缩略过就总会有一些失真,搞了很久也没搞定。据说有其他的专门处理图片的库,要新安装所以就没倒腾了。注意在createjpg的时候一定能够要把质量调成100哦,默认是75的,不过100还是会失真有点,php内置的还不够完美啊,呵呵
如果不能裁剪的话,又想提高缩略图质量的确有些麻烦。添加黑边的话,也对用户体验影响不好。
建议在制作缩略图的时候,所设置的宽高尽量用程序控制下,在设置固定值的时候使图像尽量保持原始的纵横比例。
可以的话建议还是使用裁剪,你用flash插件或者jquery都是可以实现用户自定义裁切的。
使用GD库生成。
<?
$FILENAME="image_name";
// 生成图片的宽度
$RESIZEWIDTH=400;
// 生成图片的高度
$RESIZEHEIGHT=400;
function ResizeImage($im,$maxwidth,$maxheight,$name){
$width = imagesx($im);
$height = imagesy($im);
if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){
if($maxwidth && $width > $maxwidth){
$widthratio = $maxwidth/$width;
$RESIZEWIDTH=true;
}
if($maxheight && $height > $maxheight){
$heightratio = $maxheight/$height;
$RESIZEHEIGHT=true;
}
if($RESIZEWIDTH && $RESIZEHEIGHT){
if($widthratio < $heightratio){
$ratio = $widthratio;
}else{
$ratio = $heightratio;
}
}elseif($RESIZEWIDTH){
$ratio = $widthratio;
}elseif($RESIZEHEIGHT){
$ratio = $heightratio;
}
$newwidth = $width * $ratio;
$newheight = $height * $ratio;
if(function_exists("imagecopyresampled")){
$newim = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
}else{
$newim = imagecreate($newwidth, $newheight);
imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
}
ImageJpeg ($newim,$name . ".jpg");
ImageDestroy ($newim);
}else{
ImageJpeg ($im,$name . ".jpg");
}
}
if($_FILES['image']['size']){
if($_FILES['image']['type'] == "image/pjpeg"){
$im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
}elseif($_FILES['image']['type'] == "image/x-png"){
$im = imagecreatefrompng($_FILES['image']['tmp_name']);
}elseif($_FILES['image']['type'] == "image/gif"){
$im = imagecreatefromgif($_FILES['image']['tmp_name']);
}
if($im){
if(file_exists("$FILENAME.jpg")){
unlink("$FILENAME.jpg");
}
ResizeImage($im,$RESIZEWIDTH,$RESIZEHEIGHT,$FILENAME);
ImageDestroy ($im);
}
}
?>
<img src="<? echo($FILENAME.".jpg?reload=".rand(0,999999)); ?>"><br/><br/>
<form enctype="multipart/form-data" method="post">
<br/>
<input type="file" name="image" size="50" value="浏览"><p>
<input type="submit" value="上传图片">
</form>
</body>
</html>
http://blog.s135.com/post/47/