图片比例转换算法

来源:互联网 发布:c2c商城源码 编辑:程序博客网 时间:2024/04/30 00:32

项目要求将图片上传的任意图片按固定比例进行转换,没办法自己就写了一个,代码如下:

public function cropImage($imagePath, $savePath, $scale){        $imgHandler = $this->model('Picture_Model_Image');        $imgHandler->setSrcImg($imagePath);        $imgHandler->setCutType(2);//指明为手工裁切        list($scaleW, $scaleH) = explode(':', $scale);        $imgH = $imgHandler->src_h;        $imgW = $imgHandler->src_w;        if(($imgW / $scaleW * $scaleH) < $imgH){            $cropH = ($imgW / $scaleW * $scaleH);            $cropW = $imgW;        }else{            $cropW = $imgH / $scaleH * $scaleW;            $cropH = $imgH;        }        $cropInitX = ($imgW - $cropW) / 2;        $cropInitY = ($imgH - $cropH) / 2;        $imgHandler->setSrcCutPosition($cropInitX, $cropInitY);// 源图起点坐标        $imgHandler->setRectangleCut($cropW, $cropH);// 裁切尺寸        $imgHandler->setDstImg($savePath);        return $imgHandler->createImg($cropW, $cropH);    }


大概思路是这样的:

cropW 和 <span style="font-family: Arial, Helvetica, sans-serif;">cropH  是需要裁剪的图片的大小,</span><pre name="code" class="php">cropInitX 和 <span style="font-family: Arial, Helvetica, sans-serif;">cropInitY 是裁剪的初始位置,默认是取最中间的位置</span>
<span style="font-family: Arial, Helvetica, sans-serif;">首先是根据图片的宽, 按照比例算出  高按照比例的尺寸 ,如果算出的高, 比图片的高大, 那么就</span><pre name="code" class="php"><span style="font-family: Arial, Helvetica, sans-serif;">图片的高, 按照比例算出  宽按照比例的尺寸。得到尺寸后, (用原图的宽/裁剪后的宽)/2  就可以得到裁剪的X坐标,依次类推。 </span>

<span style="font-family: Arial, Helvetica, sans-serif;"></span>


0 0