php如何裁取不变形的缩略图

函数功能是把一个图像裁剪为任意大小的图像,图像不变形,输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高...

用过bcastr的朋友应该知道,bcastr就是保证了图像调用的不变形,对一个固定大小输出的图像框,源图有以下几种情况:

1:需要输出的图像的高宽比源图的高宽都小,写成判断 $new_width<$src_width && $new_height<$src_width

2:需要输出的图像的高宽比原图的高宽都大,写成判断 $new_width>$src_width && $new_height>$src_width

3:排除第1,2两种,即一边放大,一边缩小的情况加上等于的判断

对于1,2,函数处理代码完全相同,所以可以归纳成一个处理语句

给出php实现代码

<?php
/*
*说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形
* 参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高
* written by smallchicken
* time 2008-12-18
*/
// 获得任意大小图像,不足地方拉伸,不产生变形,不留下空白
function my_image_resize($src_file, $dst_file , $new_width , $new_height) {
if($new_width <1 $new_height <1) {
echo "params width or height error !";
exit();
}
if(!file_exists($src_file)) {
echo $src_file . " is not exists !";
exit();
}
// 图像类型
$type=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
if(!in_array($type, $support_type,true)) {
echo "this type of image does not support! only support jpg , gif or png";
exit();
}
//Load image
switch($type) {
case IMAGETYPE_JPEG :
$src_img=imagecreatefromjpeg($src_file);
break;
case IMAGETYPE_PNG :
$src_img=imagecreatefrompng($src_file);
break;
case IMAGETYPE_GIF :
$src_img=imagecreatefromgif($src_file);
break;
default:
echo "Load image error!";
exit();
}
$w=imagesx($src_img);
$h=imagesy($src_img);
$ratio_w=1.0 * $new_width / $w;
$ratio_h=1.0 * $new_height / $h;
$ratio=1.0;
// 生成的图像的高宽比原来的都小,或都大 ,原则是 取大比例放大,取大比例缩小(缩小的比例就比较小了)
if( ($ratio_w < 1 && $ratio_h < 1) ($ratio_w > 1 && $ratio_h > 1)) {
if($ratio_w < $ratio_h) {
$ratio = $ratio_h ; // 情况一,宽度的比例比高度方向的小,按照高度的比例标准来裁剪或放大
}else {
$ratio = $ratio_w ;
}
// 定义一个中间的临时图像,该图像的宽高比 正好满足目标要求
$inter_w=(int)($new_width / $ratio);
$inter_h=(int) ($new_height / $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
imagecopy($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
// 生成一个以最大边长度为大小的是目标图像$ratio比例的临时图像
// 定义一个新的图像
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
switch($type) {
case IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // 存储图像
break;
case IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
break;
case IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
break;
default:
break;
}
} // end if 1
// 2 目标图像 的一个边大于原图,一个边小于原图 ,先放大平普图像,然后裁剪
// =if( ($ratio_w < 1 && $ratio_h > 1) ($ratio_w >1 && $ratio_h <1) )
else{
$ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; //取比例大的那个值
// 定义一个中间的大图像,该图像的高或宽和目标图像相等,然后对原图放大
$inter_w=(int)($w * $ratio);
$inter_h=(int) ($h * $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
//将原图缩放比例后裁剪
imagecopyresampled($inter_img,$src_img,0,0,0,0,$inter_w,$inter_h,$w,$h);
// 定义一个新的图像
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopy($new_img, $inter_img, 0,0,0,0,$new_width,$new_height);
switch($type) {
case IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // 存储图像
break;
case IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
break;
case IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
break;
default:
break;
}
}// if3
}// end function
?>

时间: 2024-08-02 04:59:03

php如何裁取不变形的缩略图的相关文章

Android 开发图片压缩/缩略图的方法

在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4. 然而,如果我们想取固定大小的缩略图就比较困难了,比如,我

Photoshop制作创意的金色立体字

字体效果制作难度较大,完全用鼠绘的方法完成.大致过程:先根据需要打上文字,然后给文字变形处理,做出有艺术感的连写效果.然后给文字上色做出金属及立体感,后期再添加装饰即可. photoshop教程最终效果 局部细节 寻找参考图. 1.选比较粗矿点的英文字体,打出你想要的字母,鼠标放该图层右键点将其栅格化,独个Ctrl+T(变换),在变换框右键,将其各种变形,塑造好你想要的造型,或者从参考图裁取你想要的笔画部分,进行各种拼凑. 2.完成草图后,用钢笔工具(P)将其勾勒出来,把图案修饰完整(可根据参考

Photoshop 润饰图像(三)裁剪图像

裁剪图像 一旦你扫描进一个图像并且在 Photoshop 中打开,你就可以进行润饰了.开始,你要使用裁剪工具裁取合适大小的图片以便它能够适合为它设计的空间. 1.在矩形选取框工具按钮上()用鼠标键保持,再拖动到()并选取.然后双击裁剪工具以显示它的选项调色板,选定Fixed Target Size(修理目标大小),输入需要的图像尺寸-3.75"×6".                     2.下面环绕图像拖动选取框,确认包括了顶端的高塔和右下角冈朵拉内橘色的蓬布.注意当你拖动选取框

光影魔术手怎么轻松制作电影大片感效果的照片?

  教你不用Ps,轻松做出超有逼格的照片/图片--有遮幅,有滤镜效果,有中英双字字幕.   第一步:样品分析 1.先贴两张电影截图分析一下.第一张是<超能陆战队>的截图,第二张是<狼图腾>的截图. 2.共同点: 电影截图都会有上下两个黑边框,黑边框我们叫它做"遮幅";电影画面均为宽幅,大约16:9;电影,尤其是现在的电影,都有中英双字字幕; 3.不同点: 第一张字幕加在了下黑边框上,而第二张加在了画面上.为什么指出不同,下面说. 4.明确做有电影截图效果的图片要

界面设计中的那些版式-图版篇

  这篇主要说一下版面和图形使用,对高手来说可能有些老生常谈,但对移动端界面设计或许会有点参考价值,用几分钟看看吧. 界面美不美,除了构图之外,另一个重要手段的就是如何处理留白,也可以理解成版率.留白就是为了凸显层次.突出内容. 手持设备屏幕较小,决定了信息显示是有限的.用户有效接受信息并不与界面内提供的信息量成正比,有的时候提供的越多,用户反而真正接受的越少.妄想满屏都是信息是不可能的.用户越来越受不了满屏的信息了. 让用户接受该接受的有效信息,是关键. 在设计界面的时候,因为内容和页面都比较

独家专访汪玉:不止是 DPU,深鉴要做 AI 解决方案提供商

对于在清华大学电子工程系担任副教授和党委副书记的汪玉来说,10 月 24 日是一个特别的日子.这一天,他以深鉴科技联合创始人的身份,参加了这家高科技创业公司成立以来的第一场公开发布会:而在这场发布会上,他的学生.也就是深鉴科技 CEO 姚颂,在介绍一些新产品之后,对外宣布了深鉴科技的新一轮融资. 右二为汪玉 这轮融资对于刚刚诞生不久却已经备受业界认可的深鉴科技来说,无疑是一个重要的发展时机:而在这一重要时间节点上,汪玉也接受了雷锋网的专访. 算法与硬件的协同优化 在这场发布会上,DPU 可能是从

Android实现简单图片压缩的方法_Android

本文实例讲述了Android实现简单图片压缩的方法.分享给大家供大家参考,具体如下: 在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图

java根据url抓取并生成缩略图的示例_java

java根据url抓取并生成缩略图 复制代码 代码如下: public static Bitmap loadImageFromUrl(String url, int sc) {        URL m;        InputStream i = null;        BufferedInputStream bis = null;        ByteArrayOutputStream out = null;        byte isBuffer[] = new byte[1024

jquery解决缩略图变形问题的例子

   代码如下 复制代码 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="/reset.css"> <sc