php 缩略图 等比例 不失真,PHP自适应宽高度等比例缩略图函数 (无裁切)

对于产品类或者图片类网站来讲,缩略图是一个很重要的应用。其实说来很简单,也就是把大图缩放成一个小图,用于图片的列表展现,这样能够达到用户快速浏览的目的,又能节省带宽。php

若是是等比例缩放,好比小图是大图的1/2或者1/5之类的,比较容易处理。但有时候咱们须要处理大量不一样尺寸的大图,让其生成固定宽高度的缩略图。那就须要一种自适应的方式缩放,就是大图在缩放的过程当中,若是宽度先达到缩略图的宽度,那大图多余的高度就被裁剪掉;若是高度先达到缩略图的高度,那大图多余的宽度就被裁剪掉。这样处理既让缩略图不失真变形,又能最大化保留大图内容。函数

今天用PHP写了一个缩略图函数,能够达到这种自适应的等比例缩放效果。网站

/*

缩略图函数

做者:影子超

博客:www.shadowchao.com

邮箱:superl3c@gmail.com

参数说明:

$w ---------- 缩略图宽度

$h ---------- 缩略图高度

$dst_path --- 缩略图路径

$src_path --- 源图像路径

*/

function zoom_image($w,$h,$dst_path,$src_path){

if(!file_exists($src_path)){

die("源图像文件未找到!");

}

list($src_w,$src_h,$src_type)=getimagesize($src_path);

switch($src_type){

case 1:$src_im=@imagecreatefromgif($src_path);break;

case 2:$src_im=@imagecreatefromjpeg($src_path);break;

case 3:$src_im=@imagecreatefrompng($src_path);break;

default:die("不能识别的图像类型!");

}

$dst_im=@imagecreatetruecolor($w,$h);

$scale_w=$src_w/$w;

$scale_h=$src_h/$h;

if($scale_w>$scale_h){

$src_w=$scale_h*$w;

}else{

$src_h=$scale_w*$h;

}

imagecopyresampled($dst_im,$src_im,0,0,0,0,$w,$h,$src_w,$src_h);

switch($src_type){

case 1:imagegif($dst_im,$dst_path,80);break;

case 2:imagejpeg($dst_im,$dst_path,80);break;

case 3:imagepng($dst_im,$dst_path,80);break;

}

imagedestroy($dst_im);

imagedestroy($src_im);

}

?>spa

函数共有4个参数,分别是你想生成的缩略图的宽度、高度、存储的路径以及大图的文件地址(能够是URL地址^_^)code

调用方式如:zoom_image(100,100,"abc_small.jpg","abc_big.jpg"),调用无返回,直接将处理后的小图存放在指定路径下。blog

//生成缩略图(带裁切)图片

function thum_img($img,$small_img){get

$thumb = imagecreatetruecolor(100, 100);博客

$bg = imagecolorallocate($thumb, 255, 255, 255);产品

imagefilledrectangle($thumb, 0, 0, 100, 100, $bg);

$i = 0;

$j1 = $j2 = 190;

$imgarr = getimagesize($img);

if($imgarr['0']>$imgarr['1']){

$j1 = $imgarr['0']/($imgarr['1']/$j2);

$i = ceil(($j2-$j1)/2);

}elseif($imgarr['0']<=$imgarr['1']){

$j2 = $imgarr['1']/($imgarr['0']/$j2);

}

if($imgarr['mime']=='image/gif'){

$source = imagecreatefromgif($img);

}elseif($imgarr['mime']=='image/jpeg'){

$source = imagecreatefromjpeg($img);

}elseif($imgarr['mime']=='image/png'){

$source = imagecreatefrompng($img);

}elseif($imgarr['mime']=='image/bmp'){

$source = imagecreatefromwbmp($img);

}

imagecopyresampled($thumb, $source, $i, 0, 0, 0, $j1, $j2, $imgarr[0], $imgarr[1]);

return imagejpeg($thumb,$small_img);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Share Point 开发系列之一:开发方式的选择

Share Point 开发系列虽然做了一段时间的Share point开发,但Share point对于我来说还是新的东西,回想起当时刚开始接触Share point的时候,到处找资料,资料到是找了很多,可是还是不知道如何下手去做Share point开发,也曾经在Cnblog上搜索了很多文章,但是对于我这样的新手来说还是…

php怎么查自己的文件编码,php检测文件编码的方法示例

关于文件编码的检测&#xff0c;很多人建议 mb_detect_encoding 检测&#xff0c;可是不知为何不成功&#xff0c;什么都没输出、看到有人写了个增强版&#xff0c;用 BOM 判断的&#xff0c;我果断就无视了&#xff0c;这东西完全不靠谱、最终根据PHP手册里 mb_detect_encodin…

基于消息与.Net Remoting的分布式处理架构

分布式处理在大型企业应用系统中&#xff0c;最大的优势是将负载分布。通过多台服务器处理多个任务&#xff0c;以优化整个系统的处理能力和运行效率。分布式处理的技术核心是完 成服务与服务之间、服务端与客户端之间的通信。在.Net 1.1中&#xff0c;可以利用Web Service或者…

[USACO07NOV]牛继电器Cow Relays

题目描述 给出一张无向连通图&#xff0c;求S到E经过k条边的最短路。 输入输出样例 输入样例#1&#xff1a;2 6 6 4 11 4 6 4 4 8 8 4 9 6 6 8 2 6 9 3 8 9 输出样例#1&#xff1a;10题解&#xff1a;法1&#xff1a;dpfloyd倍增f[i][j][p]为从i到j经过2^p条边显然f[i][j][p]mi…

oracle 时间小于,jquery easyui 对于开始时间小于结束时间的判断示例

对于开始时间小于结束时间的判断可以参考,jquery easyui里的ValidateBox进行判断好吧!直接上代码查看内容&#xff1a;按时间&#xff1a;至var varify;//用于查询验证,验证开始时间是否小于结束时间function query2(pid){if(varify){startTime2 $(#start2).datetimebox(getVa…

mysql安装与基本使用

Mysql数据库的基本使用服务端1.安装&#xff1a;sudo apt-get install mysql-service2.启动&#xff1a;sudo service mysql start3.查看进程中是否存在mysql服务&#xff1a;ps ajx|grep mysql (/usr/sbin/mysqld)4.停止服务&#xff1a;sudo service mysql stop5.重启服务&am…

批处理获取exe返回结果

echo off e:\a.exe a b c IF ERRORLEVEL 1 goto error IF ERRORLEVEL 0 goto success :error echo error goto end :success echo success goto end :end :: IF %ERRORLEVEL% LEQ 1 goto ::EQU - 等于 ::NEQ - 不等于 ::LSS - 小于 ::LEQ - 小于或等于 ::GTR - 大于 ::GEQ - 大…

centos7安装nginx和php,centos7安装nginx1.10和php7

安装nginx。1.首先在根目录下创建一个software文件夹用来存储下载的压缩包。2.然后cd跳转的software文件夹下&#xff0c;进行压缩包的下载wget -c https://nginx.org/download/nginx-1.10.1.tar.gz3.解压&#xff0c;然后跳转到解压的目录下tar -zxvf nginx-1.10.1.tar.gzcd n…

Java-日期 正则表达式

Java 日期和时间 Data类提供两个构造函数来实例化Data对象 Data()//参数是从1970 1 1 起的毫秒数Data(long millisec)获取当前日期时间 import java.util.Data;public class DataDemo {public static void main(String args[]) {// 初始化Data对象Data data new Data();//…

CCNA考试必看

成功者的经验&#xff0c;对我们来说&#xff0c;无疑是非常重要的&#xff0c;因为他们不但知道了成功的路&#xff0c;而且&#xff0c;经历过失败&#xff0c;知道哪些路是走不通的&#xff0c;这些经验对于后来者有很好的参考价值。已经通过CCNA的朋友&#xff0c;都非常愿…

oracle恢复指定数据文件,Oracle特殊恢复-BBED修改某个数据文件头

Oracle数据文件头中的scn要与控制文件中的scn一致&#xff0c;数据库才可以open&#xff0c;在open过程中我们可以通过bbed来修改某个数据文件头的scn&#xff0c;来欺骗oracle&#xff0c;来open库。1、环境如下使用Oracle 11gR2进行测试&#xff0c;具体版本为11.2.0.4SYSlin…

shell管道重定向程序的实现

管道常用于不同命令的组合使用&#xff0c;比如ps -aux|grep ..用于查找指定条件的进程&#xff0c;ls|less用于实现文件列表的分页显示等。总之是将前一个命令的输出作为后一个命令的输入&#xff0c;完成一个命令无法完成的功能。分别使用pipe()和popen()两种方式实现ls|less…

移动端网站,键盘弹出对页面的影响

在移动端网站中&#xff0c;ios与安卓键盘弹出时对页面有不同的处理方式。 ios&#xff0c;键盘弹出但整体页面高度不变。 安卓&#xff0c;页面高度屏幕高度-键盘高度 这样对页面样式就会造成不同的影响。 当有表单弹窗&#xff0c;且弹窗高度在页面高度的50%左右时影响尤为严…

Hyper-V和多处理器虚机

架构概述Hyper-V采用基于Hyperisor的架构&#xff0c;并且充分利用Windows驱动模型&#xff0c;以便提供广泛的硬件支持。Hypervisor可以把单个服务器划分为多个CPU和内存的容器。由于采用微内核架构&#xff0c;Hyper-V可以提供高效的分区间通信机制&#xff0c;并在此基础上搭…

oracle 11g 修改 sga,oracle 11g 调整SGA

1. 查看oracle 使用的参数文件SQL> show parameter spfileNAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string /u01/app/oracle/p…