分析:

当原图是横屏或竖屏的时候,希望缩略图会保持原来的比例缩放,不改变原图的完整性,即等比缩放!

此时只需确定原图的宽高,以及目标图的最大宽高,比较目标图的宽高比例与原图的宽高比例的大小,以此来判断原图是横屏或竖屏来确定以高或宽为标准即可!

代码如下:

//求目标图片的宽高
if ($max_width/$max_height < $src_width/$src_height) { $dst_w = $max_width; //以宽为标准
$dst_h = $max_width * $src_height/$src_width;
}else{ $dst_h = $max_height; //以高为标准
$dst_w = $max_height * $src_width/$src_height;
}

完整代码如下:

<?php

//目标图片最大宽高
$max_width = 300;
$max_height = 300; //创建一个真彩色的图像,支持的颜色数较多
$dst = imagecreatetruecolor($max_width, $max_height); //目标图宽高
$src = imagecreatefromjpeg('./01.jpg'); //源图 $src_width = imagesx($src); //源图的宽度
$src_height = imagesy($src); //源图的高度 //求目标图片的宽高
if ($max_width/$max_height < $src_width/$src_height) { //横屏图片以宽为标准
$dst_w = $max_width;
$dst_h = $max_width * $src_height/$src_width;
}else{ //竖屏图片以高为标准
$dst_h = $max_height;
$dst_w = $max_height * $src_width/$src_height;
} //在目标图上显示的坐标位置
$dst_x = (int)(($max_width-$dst_w)/2);
$dst_y = (int)(($max_height-$dst_h)/2); //生成缩略图
imagecopyresampled($dst,$src,$dst_x,$dst_y,0,0,$dst_w,$dst_h,$src_width,$src_height); //输出到浏览器
header('content-type:image/png');
imagepng($dst); //销毁图片资源
imagedestroy($dst);
imagedestroy($src); ?>

结果如下:

竖屏图片

横屏图片:

PHP生成缩略图(2)--等比缩略图的更多相关文章

  1. php 图片操作类,支持生成缩略图,添加水印,上传缩略图

    <?php class Image {     //类开始     public $originimage = ""; //源图片文件地址     public $image ...

  2. 显示youtube视频缩略图和Vimeo视频缩略图代码分享

    这篇文章主要介绍了显示youtube视频缩略图和Vimeo视频缩略图的代码,需要的朋友可以参考下 function video_image($url){ $image_url = parse_url( ...

  3. 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)

    今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...

  4. ngx_image_thumb模块生成缩略图

    ngx_image_thumb是nginx中用来生成缩略图的模块. 编译前确定已经安装了libcurl-dev libgd2-dev libpcre-dev gd-devel pcre-devel l ...

  5. yii php 图片上传与生成缩略图

    今天需要做图片上传与生成缩略图的功能,把代码进行记录如下: html 视图              ($pic_action_url = $this->createAbsoluteUrl('h ...

  6. 使用AVFoundation仅仅生成缩略图,不进行播放视频(本地和网络文件都可以创建视频缩略图)

    使用MPMoviePlayerController来生成缩略图足够简单,但是如果仅仅是是为了生成缩略图而不进行视频播放的话,此刻使用 MPMoviePlayerController就有点大材小用了.其 ...

  7. 利用FFmpeg生成视频缩略图 2.3.1

    1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/builds/win32/static/ ...

  8. 利用FFmpeg生成视频缩略图 2.1.8

    1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/builds/win32/static/ ...

  9. Android_Bitmap_图片的二次采样并生成缩略图

    1.Bitmap概述 Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffff ...

  10. java图片裁剪和java生成缩略图

    一.缩略图 在浏览相冊的时候.可能须要生成相应的缩略图. 直接上代码: public class ImageUtil { private Logger log = LoggerFactory.getL ...

随机推荐

  1. badboy录制网站出现css样式混乱,网页的图标点击没反应

    本人在测试web工作过程中,遇到了标题一样的问题.苦恼很久也没有找到原因.后面自己摸索,发现了问题所在! badboy安装是2.2.5版本:ie最新版本: 原因:首次安装badboy的时候,所默认的浏 ...

  2. (转)C# Enum,Int,String的互相转换 枚举转换--非常实用

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  3. Lingo 做线性规划 - Operation Management Applications

    Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...

  4. 6.关于Xamarin Android对APK包大小的处理

    降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 对于apk 包的大小大家都是很敏感的,虽然现在安卓手机的性能和存储越来越厉害了.本着能少一点是一点的态度,我们还是要深入理 ...

  5. (转)http://blog.csdn.net/renfufei/article/details/38474435

    原文:http://blog.csdn.net/renfufei/article/details/38474435

  6. SocketIo+SpringMvc实现文件的上传下载

    SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...

  7. LNMT(Linux+Nginx+MySQL+Tomcat)常见性能参数调优

  8. Postman—参数化

    一.单个数据参数化 场景:购物车接口,需要用到登录接口返回的token 1.登录接口,在Tests里面设置usertoken环境变量,用来保存token值. 2.获取购物车接口使用usertoken变 ...

  9. js with 语句的用法

    with 语句 为语句设定默认对象. with (object)    statements 参数 object 新的默认对象. statements 一个或多个语句,object 是该语句的默认对象 ...

  10. Chapter 3 Phenomenon——16

    "Your X-rays look good," he said. "Does your head hurt? Edward said you hit it pretty ...