php比例算法,图片比例转换算法

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

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 和 cropH 是需要裁剪的图片的大小,

cropInitX 和 cropInitY 是裁剪的初始位置,默认是取最中间的位置

首先是根据图片的宽, 按照比例算出 高按照比例的尺寸 ,如果算出的高, 比图片的高大, 那么就

图片的高, 按照比例算出  宽按照比例的尺寸。得到尺寸后, (用原图的宽/裁剪后的宽)/2  就可以得到裁剪的X座标,依次类推。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle安装过程掉电,Oracle数据库掉电后ORA-01172磁盘坏块解决方法

由于服务器突然掉电&#xff0c;重启机器后发现数据库无法启动。数据库版本 Oracle10201&#xff0c;OS REDHAT 5.4数据库无归档&#xff0c;无备份 [oraclehuna由于服务器突然掉电&#xff0c;重启机器后发现数据库无法启动。数据库版本 Oracle10201&#xff0c;&#xff0c;O…

php sqlite id自增,Android sqlite设置主键自增长的方法教程

今天在APP中增加一个添加项目的功能&#xff0c;项目的主键为整数&#xff0c;要让它自增长。既然要自增长&#xff0c;那么在代码里面就不用给id字段赋值。但是调试的时候发现不行&#xff0c;提示主键重复&#xff0c;观察了输出&#xff0c;不赋值的话&#xff0c;id默认为0…

oracle flashback 深入研究,oracle 之flashback 深入研究。

oracle 之flashback 深入研究。今天是2013-08-24&#xff0c;开始进行oracle flashback 内部原理研究&#xff0c;记录一下笔记。SQL> startupORACLE instance started.Total System Global Area 405020672 bytesFixed Size 2213816 bytesVariable Size …

linux删除了mount目录,Linux记录-分区(df/fdisk/mount/umount/fuser)

1.查看磁盘挂载(df -TH)2.卸载umount /dev/vdb13.查杀用户进程(fuser -m -v -i -k /dev/vdb1)4.再次卸载umount /dev/vdb1&#xff0c;并查看挂载信息df -TH5.删除分区(fdisk /dev/vdb m d 1 d w)6.查看分区(fdisk -l&#xff0c;没有Start-End磁盘分区表示可用)7.添加分区(fdi…

linux中pak命令,如何在Linux系统中安装Flatpak

选择你的Linux发行版快速安装Flatpak及使用Flatpak。支持Ubuntu、Fedora、Red Hat Enterprise Linux、Deepin、Endless OS、Linux Mint、openSUSE、Arch、Debian、CentOS、Gentoo、Solus、Alpine、Mageia、Pop!_OS、elementary OS、Raspbian。以下为你逐一介绍如何在这些Linux版…

linux服务器组件有哪些,推荐几个linux服务器面板

天兴工作室自zblog从asp换到了php就一直在玩php的程序&#xff0c;php的程序肯定是搭配linux系统更方便一些。现在的云服务器也都不贵几百块钱一年&#xff0c;就算是个人也玩得起。当然linux服务器和windows服务器的用法完全是两样&#xff1a;windows系统就跟本地电脑一样操作…

ubuntu 改linux密码忘了怎么办,Ubuntu 14.04忘记root密码的解决方法

电脑20多天没用&#xff0c;忘记Ubuntu 14.04 root密码了&#xff0c;下面是在网上找到的一个解决办法&#xff0c;其它的和这个也大概相同。因为其中有些缺漏&#xff0c;没能给我解决问题。通过分析最终问题还是解决了&#xff0c;现解决方案的关键点记录一下。希望能方便到其…

drcom linux怎么运行,Drcom_linux

64位ubuntu设置32位环境sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0//目前自己用到sudo apt-get install libsm6:i386sudo apt-get install libxi6:i386sudo apt-get install libxrender1:i386sudo apt-get install libxrandr2:i386sudo apt-get install libxcur…

linux设置历史命令保留数目限制,linux下修改history命令保存条数

在linux系统下、history命令会保存多少条命令呢&#xff1f;曾在一本书上说&#xff0c;如果注销系统&#xff0c;那么会将所有的历史命令都定入到~/.bash_history,但只保留1000条命令(这个是由默认的shell变量所设置了的)但是为什么我们执行history命令后会出现大于1000条的历…

虚拟机linux如何扩大内存吗,如何扩大Vmware虚拟机中Ubuntu系统磁盘空间的方法

在虚拟机里安装系统&#xff0c;有时即会遇到初始分配的磁盘空间不够用的情况。如果是windows系统&#xff0c;则直接在虚拟机选项里扩容即可&#xff0c;但linux系统则没有这么简单。下面是整理的vmware下ubuntu系统磁盘扩容的方法与步骤&#xff0c;仅供参考。提示&#xff1…

linux lvm lv扩充--虚拟机,虚拟机新增磁盘后lvm下的lv扩容

系统环境&#xff1a;CentOS 6.5_X64一、识别新增磁盘&#xff1a;ls /sys/class/fc_host (会看到host1,host2...hostN,对每个host进行如下操作)echo "- - -" > /sys/class/scsi_host/host1/scan (中间是有空格的)!!echo "- - -" > /sys/class/scsi_…

linux7yum安装mysql,CentOS7 使用yum安装mysql

1、安装libaio&#xff0c;yum install libaio2、卸载mariadbyum remove mariadb-libs-5.5.41-2.el7_0.x86_643、下载mysql yumrepositorywget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm4、添加Mysql yumrepository到系统列表的中&#xff0c;执行…

linux读整个文件内容,Linux查看整个文件

Linux查看整个文件使用cat命令显示文本文件的内容使用cat命令可以显示文本文件的内容。cat后面可以不加任何选项&#xff0c;直接跟文件名功能说明&#xff1a;查看某个文件的内容###cat命令语法cat [参数] [文件]选项与参数&#xff1a;-A&#xff1a;显示所有的内容&#xff…

linux终端怎么设置monaco,Monaco Editor 使用指南

为什么要写这篇文章&#xff1f;最近开发了一个简单的在线代码编辑器&#xff0c;基于 Monaco Editor 实现&#xff0c;没有了解过 Monaco 的人可能不知道&#xff0c;我们常用的 VS Code 也是基于它实现的~回到正题&#xff0c;Monaco Editor 有一份完整的官方文档&#xff0c…

linux c实现线程超时退出,c – 如何在另一个线程的超时内唤醒select()

根据“男人选择”信息&#xff1a;"On success, select() and pselect() return the number of file descrip‐tors contained in the three returned descriptor sets which may be zeroif the timeout expires before anything interesting happens. On error,-1 is ret…

linux中var的作用,linux中var是什么意思

在搭建Kubernetes集群过程中&#xff0c;安装了kube-dns插件后&#xff0c;运行一个ubuntu容器&#xff0c;发现容器内无法解析集群外域名&#xff0c;一开始可以解析集群内域名&#xff0c;一段时间后也无法解析集群内域名。$ nslookup kubernetes.default Server: 10.99.0.2 …

linux redis 主从配置,redis集群(主从配置)

redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操 作&#xff0c;而且这些操作都是…

telnet入侵linux,教你入侵RedHatLinux

此文的目的不在于教人入侵&#xff0c;而是为了提高自身的技术和加强网络管理员的安全防范意识。仅此而已!粗心大意的网络管理员应该明白&#xff1a;由于你们一个小小的操作失误可能会导致整个网络全面沦陷!本文主要是围绕LPD:网络打印服务的攻击而进行的。首先确定目标&#…

linux telnet.class,Linux telnet简单实用方法

语法telnet [-a][-e escape char][-f log file][-l user][-t term][host [port]]参数-a 企图自动登录。除了用当前已登陆的用户名以外&#xff0c;与 -l 选项相同。-e 跳过字符来进入 telnet 客户提示。-f 客户端登录的文件名-l 指定远程系统上登录用的用户名称。要求远程系统支…

linux查找文件名赋值给变量,Linux平台从文件中查找字符赋值于变量

以telnet方式登录Linux主机&#xff0c;在默认目录下用命令创建一个包含DUT wanIP的文本文件。[root] echo wanIP88.0.100.253 > ./wanIP.txt在默认目录下创建包含以下内容的shell脚本。在实际操作中&#xff0c;可能需要利用命令执行多条相同的命令。在命令后面加上"&…