PHP图片处理之图片旋转和图片翻转实例


Posted in PHP onNovember 19, 2014

图片的旋转和翻转也是Web项目中比较常见的功能,但这是两个不同的概念,图片的旋转是按特定的角度来转动图片,而图片的翻转则是将图片的内容按特定的方向对调。图片翻转需要自己编写函数来实现,而旋转图片则可以直接借助GD库中提供的imagerotate()函数完成。该函数的原型如下所示:

resource  imagerotate(resource src_im ,    float angle,    int bgd_color    [,int ignore_transpatrent])

该函数可以将src_im图像用给定的angle角度旋转,bgd_color指定了旋转后没有覆盖到的部分的颜色。旋转的中心是图像的中心,旋转后的图像会按比例缩小以适合目标图像的大小(边缘不会被剪去)。如果ignore_transpatrent被设为非零值,则透明色会被忽略(否则会被保留)。下面以JPEG格式的图片为例,声明一个可以旋转图片的函数rotate(),代码如下所示:

<?php

    //用给定角度旋转图像,以jpeg图像格式为例

    function rotate($filename,$degrees){

        //创建图像资源,以jpeg格式为例

        $source = imagecreatefromjpeg($filename);

        //使用imagerotate()函数按指定的角度旋转

        $rotate = imagerotate($source, $degrees, 0);

        //旋转后的图片保存

        $imagejpeg($rotate,$filename);

    }

 

    //把一幅图像brophp.jpg旋转180度

    rotate("brophp", 180);

?>

图片翻转并不能随意指定角度,只能设置两个方向:沿Y轴水平翻转或沿X轴垂直翻转。如果是沿Y轴翻转,就是将原图从右向左(或从做向右)按一个像素宽度,以图片自身高度循环复制到新资源中,保存的新资源就是沿Y轴翻转后的图片。以JPEG格式图片为例,声明一个可以沿Y轴翻转的图片函数turn_y()代码如下所示:

<?php

    function trun_y($filename){

        $back = imagecreatefromjpeg($filename);

 

        $width = imagesx($back); 

        $height = imagesy($back);

 

        //创建一个新的图片资源,用来保存沿Y轴翻转后的图片

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

        //沿y轴翻转就是将原图从右向左按一个像素宽度向新资源中逐个复制

        for($x=0 ;$x<$width; $x++){

            //逐条复制图片本身高度,1个像素宽度的图片到薪资源中

            imagecopy($new, $back, $width-$x-1, 0, $x, 0, 1, $height);

        }

 

        //保存翻转后的图片

        imagejpeg($new,$filename);

        imagedestroy($back);

        imagedestroy($new);

    }

 

    trun_y("brophp.jpg")

?>

本例声明的turn_y()函数只需要一个参数,就是要处理的图片URL。本例调用turn_y()函数将图片沿Y轴进行翻转。如果是沿X轴翻转,就是将原图从上向下(或从下向上)旋转,代码如下所示:

<?php

    function trun_x($filename){

        $back = imagecreatefromjpeg($filename);

 

        $width = imagesx($back); 

        $height = imagesy($back);

 

        //创建一个新的图片资源,用来保存沿Y轴翻转后的图片

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

        //沿y轴翻转就是将原图从右向左按一个像素宽度向新资源中逐个复制

        for($y=0 ;$y<$height; $y++){

            //逐条复制图片本身高度,1个像素宽度的图片到薪资源中

            imagecopy($new, $back,0, $height-$y-1, 0, $y, $width,1);

        }

 

        //保存翻转后的图片

        imagejpeg($new,$filename);

        imagedestroy($back);

        imagedestroy($new);

    }

 

    trun_x("brophp.jpg")

?>
PHP 相关文章推荐
php5.2.0内存管理改进
Jan 22 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
php 定界符格式引起的错误
May 24 PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
CI框架简单邮件发送类实例
May 18 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
php 的反射详解及示例代码
Aug 25 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
PHP学习记录之数组函数
Jun 01 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
php中Swoole的热更新实现代码实例
Mar 04 PHP
基于递归实现的php树形菜单代码
Nov 19 #PHP
php常用的url处理函数总结
Nov 19 #PHP
PHP调用wsdl文件类型的接口代码分享
Nov 19 #PHP
PHP中常用的字符串格式化函数总结
Nov 19 #PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 #PHP
PHP 读取和编写 XML
Nov 19 #PHP
PHP生成不重复随机数的方法汇总
Nov 19 #PHP
You might like
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
详解Vue方法与事件
2017/03/09 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
安全责任书怎么写
2014/07/28 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
考研英语复习计划
2015/01/19 职场文书
公司年会开场白
2015/06/01 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js