强大的PHP生成缩略图函数

2024-08-30 09:18

本文主要是介绍强大的PHP生成缩略图函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 来源URL:http://www.open-open.com/lib/view/open1337330620354.html


<?php/*** 生成缩略图* @author yangzhiguo0903@163.com* @param string     源图绝对完整地址{带文件名及后缀名}* @param string     目标图绝对完整地址{带文件名及后缀名}* @param int        缩略图宽{0:此时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)}* @param int        缩略图高{0:此时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)}* @param int        是否裁切{宽,高必须非0}* @param int/float  缩放{0:不缩放, 0<this<1:缩放到相应比例(此时宽高限制和裁切均失效)}* @return boolean*/
function img2thumb($src_img, $dst_img, $width = 75, $height = 75, $cut = 0, $proportion = 0)
{if(!is_file($src_img)){return false;}$ot = fileext($dst_img);$otfunc = 'image' . ($ot == 'jpg' ? 'jpeg' : $ot);$srcinfo = getimagesize($src_img);$src_w = $srcinfo[0];$src_h = $srcinfo[1];$type  = strtolower(substr(image_type_to_extension($srcinfo[2]), 1));$createfun = 'imagecreatefrom' . ($type == 'jpg' ? 'jpeg' : $type);$dst_h = $height;$dst_w = $width;$x = $y = 0;/*** 缩略图不超过源图尺寸(前提是宽或高只有一个)*/if(($width> $src_w && $height> $src_h) || ($height> $src_h && $width == 0) || ($width> $src_w && $height == 0)){$proportion = 1;}if($width> $src_w){$dst_w = $width = $src_w;}if($height> $src_h){$dst_h = $height = $src_h;}if(!$width && !$height && !$proportion){return false;}if(!$proportion){if($cut == 0){if($dst_w && $dst_h){if($dst_w/$src_w> $dst_h/$src_h){$dst_w = $src_w * ($dst_h / $src_h);$x = 0 - ($dst_w - $width) / 2;}else{$dst_h = $src_h * ($dst_w / $src_w);$y = 0 - ($dst_h - $height) / 2;}}else if($dst_w xor $dst_h){if($dst_w && !$dst_h)  //有宽无高{$propor = $dst_w / $src_w;$height = $dst_h  = $src_h * $propor;}else if(!$dst_w && $dst_h)  //有高无宽{$propor = $dst_h / $src_h;$width  = $dst_w = $src_w * $propor;}}}else{if(!$dst_h)  //裁剪时无高{$height = $dst_h = $dst_w;}if(!$dst_w)  //裁剪时无宽{$width = $dst_w = $dst_h;}$propor = min(max($dst_w / $src_w, $dst_h / $src_h), 1);$dst_w = (int)round($src_w * $propor);$dst_h = (int)round($src_h * $propor);$x = ($width - $dst_w) / 2;$y = ($height - $dst_h) / 2;}}else{$proportion = min($proportion, 1);$height = $dst_h = $src_h * $proportion;$width  = $dst_w = $src_w * $proportion;}$src = $createfun($src_img);$dst = imagecreatetruecolor($width ? $width : $dst_w, $height ? $height : $dst_h);$white = imagecolorallocate($dst, 255, 255, 255);imagefill($dst, 0, 0, $white);if(function_exists('imagecopyresampled')){imagecopyresampled($dst, $src, $x, $y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);}else{imagecopyresized($dst, $src, $x, $y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);}$otfunc($dst, $dst_img);imagedestroy($dst);imagedestroy($src);return true;
}

function fileext($file)
{return pathinfo($file, PATHINFO_EXTENSION);
}


这篇关于强大的PHP生成缩略图函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120406

相关文章

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC