PHP生成缩略图

/** * 生成缩略图 * @param string     源图绝对完整地址{带文件名及后缀名} * @param string     目标图绝对完整地址{带文件名及后缀名} * @param int        缩略图宽{0:此时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)} * @param int        缩略图高{0:此时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)} * @param int        是否裁切{宽,高必须非0} * @param int/float  缩放{0:不缩放, 0<this<1:缩放到相应比例(此时宽高限制和裁切均失效)} * @return boolean */public static function img2Thumb($src_img, $dst_img, $width = 75, $height = 75, $cut = 0, $proportion = 0){    if(!is_file($src_img))    {        return false;    }    //echo ‘cccccc‘."\n";    $ot = CommonMethod::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);    //echo ‘11111‘."\n";    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);    }    //echo ‘222222‘."\n";    $otfunc($dst, $dst_img);    imagedestroy($dst);    imagedestroy($src);    return true;}
时间: 2024-11-24 10:41:36

PHP生成缩略图的相关文章

nginx实时生成缩略图到硬盘上

原文:http://www.ttlsa.com/nginx/nginx-create-image-on-disk/ 现在随着各终端的出现(手机,ipad等平板),以及各种终端的手机分辨率和尺寸都不同,现在手机用户流量都是宝,网上出现了各种各样的生成缩略图功能的架构,有使用php实时生成缩略图的,也有用nginx + lua实现的,上节我也讲到了使用nginx生成缩略图,但是用户每次访问都需要生成一次,会给cpu和硬盘带来比较大的压力,今天带来了另外一种方式,这次使用nginx将原图生成缩略图到硬

生成缩略图时报GDI+中发生一般性错误

最近由于业务需要要写一个生成缩略图并能设置图片质量的功能,本来这是一件so easy的事,以前也干过,可是却遇到了问题.话不多说先看代码 /// <summary> /// 等比生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理

nginx利用image_filter动态生成缩略图

原文:http://www.open-open.com/lib/view/open1416193847945.html "我现在是有些图片需要生成缩略图,这个现在加了image_filter这个已经实现了,但我不知道怎么样才能访问我上传的原图" 刚开始觉得也不太好弄,让他用程序区处理,实际上稍微动脑筋分析一下也可以不修改程序实现动态生成缩略图且能够访问原图. 前提是需要定好图片的访问规则. 先来看一下什么是nginx的image filter模块. HttpImageFilterMod

C#生成缩略图

[csharp] view plain copy print? /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径</param> /// <param name="thumbnailPath">缩略图路径</param> /// <param name="width">缩略图宽度</par

[原创]超强C#图片上传,加水印,自动生成缩略图源代码

<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ Import Namespace=“System.IO“ %> <%@ Import Namespace=“System.Net“ %> <%@ Import NameSpace=“System.Web“ %> <%@ Import NameSpace=“Legalsof

php生成缩略图函数

/** * 生成缩略图 * @author [email protected] * @param string 源图绝对完整地址{带文件名及后缀名} * @param string 目标图绝对完整地址{带文件名及后缀名} * @param int 缩略图宽{0:此时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)} * @param int 缩略图高{0:此时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)} * @param int 是否裁切{宽,高必须非0} * @param

ASP组件AspJpeg(加水印)生成缩略图等使用方法

ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出图片的缩略图和为图片加上水印功能.下面简单介绍一下使用方法,需要的朋友可以了解下 一.为图片添加水印 复制代码 代码如下: <% Dim Jpeg ''''//声明变量 Set Jpeg = Server.CreateObject("Persits.Jpeg") ''''//调用组件

C# 生成缩略图 方法

#region -生成缩略图- /// <summary> /// 生成缩略图 /// </summary> /// <param name="orginalImagePath">原图片对象</param> /// <param name="thumbnailPath">缩略图的路径</param> /// <param name="width">指定宽度<

帝国cms实现自动生成缩略图和自动分页功能

无论你手工发布,还是采集而来,免不了要进行手工操作弄缩略图,不然标题图片没有,挺烦人的 只需一次设定,就可以在文章编辑框里自动勾选上分页和生成缩略图,免除你次次进行操作的麻烦,好了,废话不多说,上菜“ 先到 系统>管理数据表 >   后,在你需要进行设定的类型里更改,比如我要 新闻 这项的实现自动生成标题缩略图和自动分页(当然,你也可以单独实现分页和生成缩略图)          找到 新闻系统数据表  ( phome_ ecms_ news ) >[管理字段]>新闻正文   后面

根据图片URL裁切并生成缩略图

package jtest; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.CropImageFilter; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import