php实现图片缩略图的方法

来源:脚本之家  责任编辑:小易  

一般上传图片会返回一个上传图片的文件名,上传会指定你的上传路径。例如:www/project/Upl

本段代码实现功能有这些:

都可以哈,如果真要改变图片的大小,可以用PHP的GD库来处理。见http://zhidao.baid

支持jpg,jpeg,gif,png,bmp图片格式,支持按原图片的比例进行缩放,可以选择在图片缩放的过程中是否需要对图片进行裁切,加入了图片质量控制,可以实现缩略图片质量最高化。

public function disposeImgAction($tmp_path, $dst_w

完整类的代码如下:

将图片等比例缩放一下再放到框子里,等比例缩放函数要调用GD库的函数,缩放函数要自己写,网上也能搜到

有图片路径就能搞定,unlink("路径");方法删除文件或许把图片放到

<?php /** * 功能:php生成缩略图片的类 */ class ResizeImage{ public $type;//图片类型 public $width;//实际宽度 public $height;//实际高度 public $resize_width;//改变后的宽度 public $resize_height;//改变后的高度 public $cut;//是否裁图 public $srcimg;//源图象 public $dstimg;//目标图象地址 public $im;//临时创建的图象 public $quality;//图片质量 function resizeimage($img,$wid,$hei,$c,$dstpath,$quality=100){ $this->srcimg=$img; $this->resize_width=$wid; $this->resize_height=$hei; $this->cut=$c; $this->quality=$quality; $this->type=strtolower(substr(strrchr($this->srcimg,'.'),1));//图片的类型 $this->initi_img();//初始化图象 $this -> dst_img($dstpath);//目标图象地址 @$this->width=imagesx($this->im); @$this->height=imagesy($this->im); $this->newimg();//生成图象 @ImageDestroy($this->im); } function newimg(){ $resize_ratio=($this->resize_width)/($this->resize_height);//改变后的图象的比例 @$ratio=($this->width)/($this->height);//实际图象的比例 if(($this->cut)=='1'){//裁图 if($img_func==='imagepng'&&(str_replace('.','',PHP_VERSION)>=512)){ //针对php版本大于5.12参数变化后的处理情况 $quality=9; } if($ratio>=$resize_ratio){//高度优先 $newimg=imagecreatetruecolor($this->resize_width,$this->resize_height); imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,$this->resize_height,(($this->height)*$resize_ratio),$this->height); imagejpeg($newimg,$this->dstimg,$this->quality); } if($ratio<$resize_ratio){//宽度优先 $newimg=imagecreatetruecolor($this->resize_width,$this->resize_height); imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,$this->resize_height,$this->width,(($this->width)/$resize_ratio)); imagejpeg($newimg,$this->dstimg,$this->quality); } }else{//不裁图 if($ratio>=$resize_ratio){ $newimg=imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio); imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,($this->resize_width)/$ratio,$this->width,$this->height); imagejpeg($newimg,$this->dstimg,$this->quality); } if($ratio<$resize_ratio){ @$newimg=imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height); @imagecopyresampled($newimg,$this->im,0,0,0,0,($this->resize_height)*$ratio,$this->resize_height,$this->width,$this->height); @imagejpeg($newimg,$this->dstimg,$this->quality); } } } function initi_img(){//初始化图象 if($this->type=='jpg' || $this->type=='jpeg'){ $this->im=imagecreatefromjpeg($this->srcimg); } if($this->type=='gif'){ $this->im=imagecreatefromgif($this->srcimg); } if($this->type=='png'){ $this->im=imagecreatefrompng($this->srcimg); } if($this->type=='wbm'){ @$this->im=imagecreatefromwbmp($this->srcimg); } if($this->type=='bmp'){ $this->im=$this->ImageCreateFromBMP($this->srcimg); } } function dst_img($dstpath){//图象目标地址 $full_length=strlen($this->srcimg); $type_length=strlen($this->type); $name_length=$full_length-$type_length; $name=substr($this->srcimg,0,$name_length-1); $this->dstimg=$dstpath; //echo $this->dstimg; } function ImageCreateFromBMP($filename){ //自定义函数处理bmp图片 if(!$f1=fopen($filename,"rb"))returnFALSE; $FILE=unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset",fread($f1,14)); if($FILE['file_type']!=19778)returnFALSE; $BMP=unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'. '/Vcompression/Vsize_bitmap/Vhoriz_resolution'. '/Vvert_resolution/Vcolors_used/Vcolors_important',fread($f1,40)); $BMP['colors']=pow(2,$BMP['bits_per_pixel']); if($BMP['size_bitmap']==0)$BMP['size_bitmap']=$FILE['file_size']-$FILE['bitmap_offset']; $BMP['bytes_per_pixel']=$BMP['bits_per_pixel']/8; $BMP['bytes_per_pixel2']=ceil($BMP['bytes_per_pixel']); $BMP['decal']=($BMP['width']*$BMP['bytes_per_pixel']/4); $BMP['decal']-=floor($BMP['width']*$BMP['bytes_per_pixel']/4); $BMP['decal']=4-(4*$BMP['decal']); if($BMP['decal']==4)$BMP['decal']=0; $PALETTE=array(); if($BMP['colors']<16777216) { $PALETTE=unpack('V'.$BMP['colors'],fread($f1,$BMP['colors']*4)); } $IMG=fread($f1,$BMP['size_bitmap']); $VIDE=chr(0); $res=imagecreatetruecolor($BMP['width'],$BMP['height']); $P=0; $Y=$BMP['height']-1; while($Y>=0) { $X=0; while($X<$BMP['width']) { if($BMP['bits_per_pixel']==24) $COLOR=unpack("V",substr($IMG,$P,3).$VIDE); elseif($BMP['bits_per_pixel']==16) { $COLOR=unpack("n",substr($IMG,$P,2)); $COLOR[1]=$PALETTE[$COLOR[1]+1]; } elseif($BMP['bits_per_pixel']==8) { $COLOR=unpack("n",$VIDE.substr($IMG,$P,1)); $COLOR[1]=$PALETTE[$COLOR[1]+1]; } elseif($BMP['bits_per_pixel']==4) { $COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1)); if(($P*2)%2==0)$COLOR[1]=($COLOR[1]>>4);else$COLOR[1]=($COLOR[1]&0x0F); $COLOR[1]=$PALETTE[$COLOR[1]+1]; } elseif($BMP['bits_per_pixel']==1) { $COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1)); if(($P*8)%8==0)$COLOR[1]=$COLOR[1]>>7; elseif(($P*8)%8==1)$COLOR[1]=($COLOR[1]&0x40)>>6; elseif(($P*8)%8==2)$COLOR[1]=($COLOR[1]&0x20)>>5; elseif(($P*8)%8==3)$COLOR[1]=($COLOR[1]&0x10)>>4; elseif(($P*8)%8==4)$COLOR[1]=($COLOR[1]&0x8)>>3; elseif(($P*8)%8==5)$COLOR[1]=($COLOR[1]&0x4)>>2; elseif(($P*8)%8==6)$COLOR[1]=($COLOR[1]&0x2)>>1; elseif(($P*8)%8==7)$COLOR[1]=($COLOR[1]&0x1); $COLOR[1]=$PALETTE[$COLOR[1]+1]; } else returnFALSE; imagesetpixel($res,$X,$Y,$COLOR[1]); $X++; $P+=$BMP['bytes_per_pixel']; } $Y--; $P+=$BMP['decal']; } fclose($f1); return$res; } } ?>

按我们潍坊老一辈说,“一个旋好,两个旋坏,仨旋是个猪八戒”,这略带有嘲笑的色彩。小的时候,我们也总是念着这句话,去嘲笑那些两个旋的小朋友,不过三个旋我还没见过。不过很多人认为头上有两个旋的人比较聪明灵活.思想转得比较快,比一个旋的人要聪明.在《神雕侠侣》故事里,周伯通见到瑛姑,问的第一句话是:我们的儿子头上是一个旋还是两个旋瑛姑说:是两个旋.周伯通说:那很好,象我!很聪明!可见两个旋的人聪明的理论在宋代就已经被证实了!个人认为,关于旋的说法没有任何科学依据,没必要因此过于担心

使用方法很简单代码如下:

生过小孩的和没有生过小孩的从外表上就可以看出来,屁股和肚子都会大一些,除非身材特别好的不发胖的除外。生过的心理上更加成熟,以前没生小孩之前看男人只看脸,生了小孩之后脸都是次要的,现在是看别的地方,你懂的。生了孩子的可以随便讲粗话,没有人笑话,没有生小孩的讲个粗话被人听到还会害羞一下。生过孩子的女人大大咧咧,觉得自己这一生就完了,孩子家庭,洗衣做饭。没有生孩子的女人羞羞答答,还以为自己是处女一样,想着自己还可以再婚再嫁,甚至找一个更好的男人。

逍客这款车,车内空间较大,采用直喷发动机油耗更低,操控配置跟为齐全,性价比更高,如果喜欢可以考虑购买。逍客作为新车型目前质量是否稳定还不得而知,但以往车型质量都是很好的,没有什么共性问题。智跑这款车,外形比较时尚,动力满足家用,油耗较低,车内空间较大,安全配置方面带有前排侧气囊,操控配置方面带有ESP、牵引力控制、上坡辅助等系统,性价比不错,从目前的投诉情况来看,质量较为稳定。东风本田XR-V,这款车质量比较稳定,动力油耗满足日常需求,从配置方面来看,带有ESP与EBD等系统操控配置齐全。安全性方面配有前后防撞钢梁,配有前排侧气囊、气帘与头部气囊。空间比较大,性价比不错。这三款车都是不错的车型

$resizeimage=new ResizeImage('upload/abc.bmp', '120', '90', '0', 'upload/xabc.bmp');

闺蜜向我抱怨,老公让她去上环。闺蜜家的宝宝一岁多,最近两年都不想要孩子,又害怕意外怀孕。她老公就让她去上环。闺蜜没吭声,自己上网看看上环有没有什么副作用。不看不知道,一看吓一跳。上环就相当于每次做一次刮宫手术。在子宫内放置异物,当有胚胎想在子宫内着床时,避孕环不断动作刮擦子宫壁,造成子宫的无菌性炎症,使胚胎无法在子宫内正常着床受孕,从而造成流产,以达到避孕的目的。闺蜜表示坚决不上环,在身体里无缘无故放个外物别提会多难受,看到每月刮宫一次都觉得害怕。在别的国家从来就不会有这种手术,都是推荐避孕套来进行避孕,而且避孕套还能防止爱滋病的传播,但是上环不能。上环究竟有没有度娘说的那告诉么可怕呢?过来人

以上代码是小编给大家分享的php实现图片缩略图的方法,希望对大家有所帮助!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

PHP 图片上传生成缩略图

先标记下,稍后上传完整代码

你可以选择是否保留原图

//如果你不想要原图,就把下面两行删掉

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?php

$smalladdrname="slt/";//缩略图存放目录位置

$RESIZEWIDTH='200';//定义最大宽

$RESIZEHEIGHT='200';//定义最大高

function ResizeImage($im,$maxwidth,$maxheight,$name){

$width = imagesx($im);

$height = imagesy($im);

if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){

if($maxwidth && $width > $maxwidth){

$widthratio = $maxwidth/$width;

$RESIZEWIDTH=true;

}

if($maxheight && $height > $maxheight){

$heightratio = $maxheight/$height;

$RESIZEHEIGHT=true;

}

if($RESIZEWIDTH && $RESIZEHEIGHT){

if($widthratio < $heightratio){

$ratio = $widthratio;

}else{

$ratio = $heightratio;

}

}elseif($RESIZEWIDTH){

$ratio = $widthratio;

}elseif($RESIZEHEIGHT){

$ratio = $heightratio;

}

$newwidth = $width * $ratio;

$newheight = $height * $ratio;

if(function_exists("imagecopyresampled")){

$newim = imagecreatetruecolor($newwidth, $newheight);

imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

}else{

$newim = imagecreate($newwidth, $newheight);

imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

}

ImageJpeg ($newim,$smalladdrname.$name.".jpg");

ImageDestroy ($newim);

}else{

ImageJpeg ($im,$smalladdrname.$name.".jpg");

}

}

 

if($_FILES['image']['size']){

if($_FILES['image']['type'] == "image/pjpeg" || $_FILES['image']['type'] == "image/jpeg"){

$im = imagecreatefromjpeg($_FILES['image']['tmp_name']);

}elseif($_FILES['image']['type'] == "image/x-png"  || $_FILES['image']['type'] == "image/png"){

$im = imagecreatefrompng($_FILES['image']['tmp_name']);

}elseif($_FILES['image']['type'] == "image/gif"){

$im = imagecreatefromgif($_FILES['image']['tmp_name']);

}

if($im){

//生成新的文件名

$basename = time().rand(10,99);

$newname = $smalladdrname.'slt_'.$basename.'.jpg';

//如果你不想要原图,就把下面两行删掉

$newname_yt = $smalladdrname.'yt_'.$basename.'.jpg';

copy($_FILES['image']['tmp_name'],$newname_yt);//原图

if(file_exists($newname.".jpg")){

unlink($newname.".jpg");

}

ResizeImage($im,$RESIZEWIDTH,$RESIZEHEIGHT,$newname);

ImageDestroy ($im);

echo '缩略图生成成功!位置在 '.$newname.'<hr />';

}else{

    echo '未知错误';

}

}

?>

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">

  图片

  <label>

  <input name="image" type="file" id="image" />

  </label>

  <p>

    <label>

    <input type="submit" name="Submit" value="提交" />

    </label>

  </p>

</form>追问能不能生成 大小不同的两个缩略图追答可以的,这个修改下代码就可以了

PHP怎样上传图片以及预览图片?

本地图片,就搞个img,设置他的src就可以实现;

参考如下:

<div class="column " style="width: 400px; margin-left: 200px;" id="imageShow">

<div id="productImageNew">@*用于图片预览*@

</div>

<div id="productImage">

<div class="widget the-common-margin-top" style="height: 400px; border: 1px solid #eeeeee;

padding: 3px;">

<img id="imgHolder" style="max-height: 390px; max-width: 390px;" />

</div>

</div>

</div>

<form id="formImageUpload" name="formImageUpload" method="post" action="/DocTeam/ProductsImage/UploadImage"

enctype="multipart/form-data">

<div id="fileDiv">

<input type="file" id="theFile" name="theFile" size="20" style="cursor: pointer;

width: 65px; height: 60px; position: absolute; filter: alpha(opacity:1); -moz-opacity: 0;

opacity: 0; z-index: 102;" />

</div>

<input type="hidden" name="imageId_hide" id="imageId_hide" />

</form>

<div id="cover" style="position: absolute; background-color: White; z-index: 10;

filter: alpha(opacity=100); -moz-opacity: 1; opacity: 1; overflow: auto; width: 400px;">

<input id="selectImage" type="button" style="width: 65px; height: 60px;" value="Select" />

<br />

<br />

<input type="button" value="Upload" id="imageUpload" style="width: 65px; height: 60px;"

disabled="disabled" onclick="javascript:uploadImage();" />

</div>

//js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3

function PreviewImage(fileObj, imgPreviewId, divPreviewId) {

var allowExtention = ".jpg,.bmp,.gif,.png"; //允许上传文件的后缀名document.getElementById("hfAllowPicSuffix").value;

var extention = fileObj.value.substring(fileObj.value.lastIndexOf(".") + 1).toLowerCase();

var browserVersion = window.navigator.userAgent.toUpperCase();

if (allowExtention.indexOf(extention) > -1) {

if (fileObj.files) {//HTML5实现预览,兼容chrome、火狐7+等

if (window.FileReader) {

var reader = new FileReader();

reader.onload = function (e) {

document.getElementById(imgPreviewId).setAttribute("src", e.target.result);

}

reader.readAsDataURL(fileObj.files[0]);

} else if (browserVersion.indexOf("SAFARI") > -1) {

alert("不支持Safari6.0以下浏览器的图片预览!");

}

} else if (browserVersion.indexOf("MSIE") > -1) {

if (browserVersion.indexOf("MSIE 6") > -1) {//ie6

document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);

} else {//ie[7-9]

fileObj.select();

if (browserVersion.indexOf("MSIE 9") > -1)

fileObj.blur(); //不加上document.selection.createRange().text在ie9会拒绝访问

var newPreview = document.getElementById(divPreviewId + "New");

if (newPreview == null) {

newPreview = document.createElement("div");

newPreview.setAttribute("id", divPreviewId + "New");

}

var a = document.selection.createRange().text;

// newPreview.style.width = document.getElementById(imgPreviewId).width + "px";

// newPreview.style.height = document.getElementById(imgPreviewId).height + "px";

//newPreview.style.width = 390 + "px";

newPreview.style.height = 390 + "px";

newPreview.style.border = "solid 1px #eeeeee";

newPreview.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + document.selection.createRange().text + "')";

var tempDivPreview = document.getElementById(divPreviewId);

// tempDivPreview.parentNode.insertBefore(newPreview, tempDivPreview);

newPreview.style.display = "block";

tempDivPreview.style.display = "none";

}

} else if (browserVersion.indexOf("FIREFOX") > -1) {//firefox

var firefoxVersion = parseFloat(browserVersion.toLowerCase().match(/firefox\/([\d.]+)/)[1]);

if (firefoxVersion < 7) {//firefox7以下版本

document.getElementById(imgPreviewId).setAttribute("src", fileObj.files[0].getAsDataURL());

} else {//firefox7.0+

document.getElementById(imgPreviewId).setAttribute("src", window.URL.createObjectURL(fileObj.files[0]));

}

} else {

document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);

}

} else {

alert("仅支持" + allowExtention + "为后缀名的文件!");

fileObj.value = ""; //清空选中文件

if (browserVersion.indexOf("MSIE") > -1) {

fileObj.select();

document.selection.clear();

}

fileObj.outerHTML = fileObj.outerHTML;

}

}

function setTheFileButton_Cover_SelectImageButton() {

// debugger;

// var position = $("#selectImage", "#cover").position();

// var css = { top: position.top, left: position.left };

// $("#theFile", "#fileDiv").css(css);

}

var $imgHolder = $('#imgHolder', "#productImage");

var tempDiv = $("#temp_div");

$("#select", "#cover").click(function () {

$("#theFile", "#fileDiv").click().select();

});

$("#theFile", "#fileDiv").click(function () {

$(this).blur();

});

$("#theFile", "#fileDiv").change(function () {

PreviewImage(this, 'imgHolder', 'productImage');

setTheFileButton_Cover_SelectImageButton();

// alert("预览已生成!");

$("#imageUpload").prop("disabled", false);

});

php创建缩略图问题

其实PHP创建缩略图就是在PHP在原图片的基础上创建一张新的图片的过程,而用PHP创建图像的过程一般分成四部:

第一步:创建一张画布(只要是画图都需要一张画布的)

第二步:在画布画东西(可以画各种图形,如长方形,直线,等等,也可以在画布上写字啥的,或者画其他的图形)

第三步:画完图之后,将图片输出,将图片输出到浏览器,在浏览器显示出来,或者保存为一张新 的图片(缩略图一般是保存为图片文件的)

第四步:因为创建画布时打开了文件流,所以要关闭资源,节省内存。(个人觉得你可以这样理解,打开了一画布,把它铺开了,画完了就把画布卷起来,收起来,不要占着铺的地方)

具体的代码如下:(这段代码来源于ThinkPHP的图像类)

<?php

class Thumb{

   /**

     * @param string $image  原图

     * @param string $thumbname 缩略图文件名

     * @param string $type 图像格式

     * @param string $maxWidth  宽度

     * @param string $maxHeight  高度

   */

   static create($img, $thumbname, $type='', $maxWidth=200, $maxHeight=50)

   {

       $info = getimagesize($img);    //获取原图的图像信息(长、宽、格式等)

       if ($info !== false) {

            $srcWidth = $info['width'];

            $srcHeight = $info['height'];

            $type = empty($type) ? $info['type'] : $type;

            $type = strtolower($type);

            $interlace = $interlace ? 1 : 0;

            unset($info);

            $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 计算缩放比例

            if ($scale >= 1) {

                // 超过原图大小不再缩略

                $width = $srcWidth;

                $height = $srcHeight;

            } else {

                // 缩略图尺寸

                $width = (int) ($srcWidth * $scale);

                $height = (int) ($srcHeight * $scale);

            }

            // 载入原图(在原图的基础上创建画布,为第一步)

            $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type);

            if(!function_exists($createFun)) {

                return false;

            }

            $srcImg = $createFun($image);

            //第二步开始

            //创建缩略图

            if ($type != 'gif' && function_exists('imagecreatetruecolor'))

                $thumbImg = imagecreatetruecolor($width, $height);

            else

                $thumbImg = imagecreate($width, $height);

              //png和gif的透明处理 by luofei614

            if('png'==$type){

                imagealphablending($thumbImg, false);//取消默认的混色模式(为解决阴影为绿色的问题)

                imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息(为解决阴影为绿色的问题)    

            }elseif('gif'==$type){

                $trnprt_indx = imagecolortransparent($srcImg);

                 if ($trnprt_indx >= 0) {

                        //its transparent

                       $trnprt_color = imagecolorsforindex($srcImg , $trnprt_indx);

                       $trnprt_indx = imagecolorallocate($thumbImg, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);

                       imagefill($thumbImg, 0, 0, $trnprt_indx);

                       imagecolortransparent($thumbImg, $trnprt_indx);

              }

            }

            // 复制图片

            if (function_exists("ImageCopyResampled"))

                imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);

            else

                imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);

           //第三步:输出图像

            // 生成图片

            $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type);

            $imageFun($thumbImg, $thumbname);

            

            //第四步:关闭画布

            imagedestroy($thumbImg);

            imagedestroy($srcImg);

            return $thumbname;

        }

        return false;

       

   }

}

?>

你使用的时候直接用:

require Thumb.class.php

$thumb = Thumb::create('s.jpg','thumb_s.jpg',100,50);

希望我的回答你能满意

谁有php批量处理图片、图片生成缩略图、图片添加水印的函数?

//批量处理图片、图片生成缩略图、图片添加水印

$dir = opendir (dirname(__FILE__));

while (!!$_file = readdir($dir)){

 list($filesname,$kzm)=explode(".",$_file);//获取扩展名

 if($kzm=="gif" or $kzm=="jpg" or $kzm=="JPG" or $kzm=="png") {

  if(!makethumb("$_file","120","120","100")){

   echo '执行成功!';

  }else{

   echo '执行失败!';

  }

 }

}

closedir($dir);

/**

 * 处理缩略图并添加水印函数

 * @access publiuc

 * @param $srcFile-----------图片文件名

 * @param $dstFile-----------另存的文件名

 * @param $dstW-------------图片保存的宽度

 * @param $dstH--------------图片保存的高度

 * @param $rate---------------图片保存的品质

 * @param $markwords-----水印文字

 * @param $markimage-----水印图片

 * @param 使用方法 makethumb("a.jpg","b.jpg","120","120","100");

 */

function makethumb($srcFile/*,$dstFile*/,$dstW,$dstH,$rate=100/*,$markwords=null,$markimage=null*/) {

 

 $data = GetImageSize($srcFile);

 switch($data[2]) {

  case 1:

  $im=@ImageCreateFromGIF($srcFile);

  break;

  case 2:

  $im=@ImageCreateFromJPEG($srcFile);

  break;

  case 3:

  $im=@ImageCreateFromPNG($srcFile);

  break;

  }

 if(!$im) return False;

 $srcW=ImageSX($im);

 $srcH=ImageSY($im);

 $dstX=0;

 $dstY=0;

 if ($srcW*$dstH>$srcH*$dstW) {

 $fdstH = round($srcH*$dstW/$srcW);

 $dstY = floor(($dstH-$fdstH)/2);

 $fdstW = $dstW;

 }

 else

 {

 $fdstW = round($srcW*$dstH/$srcH);

 $dstX = floor(($dstW-$fdstW)/2);

 $fdstH = $dstH;

 }

$ni=ImageCreateTrueColor($dstW,$dstH);

$dstX=($dstX<0)?0:$dstX;

$dstY=($dstX<0)?0:$dstY;

$dstX=($dstX>($dstW/2))?floor($dstW/2):$dstX;

$dstY=($dstY>($dstH/2))?floor($dstH/s):$dstY;

$white = ImageColorAllocate($ni,255,255,255);

$black = ImageColorAllocate($ni,0,0,0);

imagefilledrectangle($ni,0,0,$dstW,$dstH,$white);// 填充背景色

ImageCopyResized($ni,$im,$dstX,$dstY,0,0,$fdstW,$fdstH,$srcW,$srcH);

//if($markwords!=null){

// $markwords=iconv("gb2312","UTF-8",$markwords);

// //转换文字编码

// ImageTTFText($ni,20,30,450,560,$black,"simhei.ttf",$markwords); //写入文字水印,参数依次为,文字大小|偏转度|横坐标|纵坐标|文字颜色|文字类型|文字内容

//}elseif($markimage!=null) {

// $wimage_data = GetImageSize($markimage);

// switch($wimage_data[2]) {

// case 1:

//  $wimage=@ImageCreateFromGIF($markimage);

//  break;

// case 2:

//  $wimage=@ImageCreateFromJPEG($markimage);

//  break;

// case 3:

//  $wimage=@ImageCreateFromPNG($markimage);

//  break;

// }

// imagecopy($ni,$wimage,500,560,0,0,88,31); //写入图片水印,水印图片大小默认为88*31

// imagedestroy($wimage);

//}

$dstFile = $srcFile.'.gif';

ImageJpeg($ni,$dstFile,$rate);

//ImageJpeg($ni,$srcFile,$rate);

imagedestroy($im);

imagedestroy($ni);

}

PHP如何把上传的照片生成高质量的缩略图?

ImageMagick没用过,一般直接用内置的GD库,没有发现你说的这么严重的失真问题。

利用GD库创建缩略图的大致思路如下:

  1. 依据设定的尺寸创建真彩色画布$im=createtruecolor(120,90);

  2. 读取原始文件尺寸,按照原始尺寸的宽度和高度比例,计算出缩略图的大小(可能与给定的尺寸有一定的偏差)

  3. 将原始图像拷贝并缩放到创建的真彩色缩略图画布上。

  4. 输出缩略图文件。

可能就是因为利用的是这个真彩色,缩略图效果还凑合,也不是说绝对不失真的。

  • 本文相关:
  • php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
  • 超级好用的一个php上传图片类(随机名,缩略图,加水印)
  • php用gd库生成高质量的缩略图片
  • phpthumb php 图片缩略图库
  • php图片的裁剪与缩放生成符合需求的缩略图
  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享
  • php实现上传图片生成缩略图示例
  • php图片等比例缩放生成缩略图函数分享
  • jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
  • php实现按指定大小等比缩放生成上传图片缩略图的方法
  • php生成图片缩略图的方法
  • laravel框架实现简单的学生信息管理平台案例【附源码下载】
  • 自己写的php中文截取函数mb_strlen和mb_substr
  • php使用redis位图bitmap 实现签到功能
  • yii2缓存caching基本用法示例
  • php 使用curl模拟登录人人(校内)网的简单实例
  • php正则表达式过滤html标签属性(demo)
  • laravel事件监听器用法实例分析
  • php 5.6.11 访问sql server2008r2的几种情况详解
  • php将url转换成短网址的算法分享
  • php表单数据写入mysql数据库的代码
  • PHP 图片上传生成缩略图
  • PHP怎样上传图片以及预览图片?
  • php创建缩略图问题
  • 谁有php批量处理图片、图片生成缩略图、图片添加水印的函数?
  • PHP如何把上传的照片生成高质量的缩略图?
  • php 上传图片 并生成缩略图
  • php代码 如何控制缩略图和原图的大小?
  • php上传图片生成三张缩略图,大中小。帮忙看一下
  • PHP缩略图组件的使用?
  • php 怎么把文件里的原图片和缩略图删掉
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved