这里写的是完成每个功能的函数,可以复制单个函数直接使用,这里的每个函数都是另外一篇PHP常用类------图片处理类Image当中的方法进行细化,可以参考一下

废话不多说,直接付代码吧!

添加水印(文字和图片)

<?php
/**
* [创建图片文字水印]
* @param [string] $imagename [需要添加水印的值]
* @param [string] $string [图片上添加的文字]
* @param [string] $locate [水印位置,center,left_buttom,right_buttom三选一]
* @return [null] [description]
*/
function create_words_watermark($imagename,$string,$locate){
list($width,$height,$type)=getimagesize($imagename);
$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
4 => "SWF",5 => "PSD",6 => "BMP",
7 => "TIFF",8 => "TIFF",9 => "JPC",
10 => "JP2",11 => "JPX",12 => "JB2",
13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
$type=strtolower($types[$type]);
$create="imagecreatefrom".$type;
$img=$create($imagename); $string_color=imagecolorallocate($img,200, 200, 200);
$fontsize=4; // 图片的宽和高也可用下面两个函数获得
// $width=imagesx($img);
// $height=imagesy($img); switch($locate){
case 'center':
$x=($width-imagefontwidth($fontsize)*strlen($string))/2;
$y=($height-imagefontheight($fontsize))/2;
break;
case 'left_buttom':
$x=5;
$y=($height-imagefontheight($fontsize)-3);
break;
case 'right_buttom':
$x=($width-imagefontwidth($fontsize)*strlen($string)-3);
$y=($height-imagefontheight($fontsize)-3);
break;
default:
die("未指定水印位置!");
break;
} imagestring($img,$fontsize,$x,$y,$string,$string_color);
imagestring($img,$fontsize,$x+1,$y+1,$string,$string_color); $save="image".$type;
//保存
//$save($img,"new_".$imagename); //显示
header("content-type:image/".$type);
$save($img);
imagedestroy($img);
} // create_words_watermark("test.png","hello world","right_buttom"); /**
* [create_pic_watermark 添加图片水印]
* @param [string] $dest_image [需要添加图片水印的图片名]
* @param [string] $watermark [水印图片名]
* @param [string] $locate [水印位置,center,left_buttom,right_buttom三选一]
* @return [type] [description]
*/
function create_pic_watermark($dest_image,$watermark,$locate){
list($dwidth,$dheight,$dtype)=getimagesize($dest_image);
list($wwidth,$wheight,$wtype)=getimagesize($watermark); $types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
4 => "SWF",5 => "PSD",6 => "BMP",
7 => "TIFF",8 => "TIFF",9 => "JPC",
10 => "JP2",11 => "JPX",12 => "JB2",
13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM"); $dtype=strtolower($types[$dtype]);//原图类型
$wtype=strtolower($types[$wtype]);//水印图片类型 $created="imagecreatefrom".$dtype;
$createw="imagecreatefrom".$wtype; $imgd=$created($dest_image);
$imgw=$createw($watermark); switch($locate){
case 'center':
$x=($dwidth-$wwidth)/2;
$y=($dheight-$wheight)/2;
break;
case 'left_buttom':
$x=1;
$y=($dheight-$wheight-2);
break;
case 'right_buttom':
$x=($dwidth-$wwidth-1);
$y=($dheight-$wheight-2);
break;
default:
die("未指定水印位置!");
break;
} imagecopy($imgd,$imgw,$x,$y,0,0, $wwidth,$wheight); $save="image".$dtype; //显示
header("content-type:image/".$dtype);
$save($imgd); imagedestroy($imgw);
imagedestroy($imgd);
} create_pic_watermark("ganlixin.jpg","test.png","left_buttom");
?>

剪切图片

<?php
/**
* [cut_image] 从原图中剪切一部分
* @param [string] $old_imagename [需要剪切的图片名]
* @param [int] $start_width [从原图片宽为的$start_width开始剪切]
* @param [int] $start_height [从原图片高为的$start_height开始剪切]
* @param [int] $new_width [从原图片中剪切$new_width的宽度]
* @param [int] $new_height [从原图片中剪切$new_height的高度]
* @return [null] [null]
*/
function cut_image($old_imagename,$start_width,$start_height,$new_width,$new_height){
list($old_width,$old_height,$type)=getimagesize($old_imagename);
$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
4 => "SWF",5 => "PSD",6 => "BMP",
7 => "TIFF",8 => "TIFF",9 => "JPC",
10 => "JP2",11 => "JPX",12 => "JB2",
13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
$type=strtolower($types[$type]);
$create="imagecreatefrom".$type; $old_img=$create($old_imagename);
$new_img=imagecreatetruecolor($new_width, $new_height); imagecopyresampled($new_img,$old_img,0,0,$start_width,$start_height,$new_width,$new_height,$new_width,$new_height);
$save="image".$type; //保存
//$save($new_img,"new_".$old_imagename); //显示
header("content-type:image/".$type);
$save($new_img); //销毁
imagedestroy($old_img);
imagedestroy($new_img);
} cut_image("ganlixin.jpg",0,0,200,200);
?>

  

翻转图片

<?php
/**
* [rotate_image 图片旋转]
* @param [string] $imagename [要进行旋转的图片名]
* @param [string] $angle [旋转的角度,逆时针为正]
* @return [null] [description]
*/
function rotate_image($imagename,$angle){
list($width,$height,$type)=getimagesize($imagename);
$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
4 => "SWF",5 => "PSD",6 => "BMP",
7 => "TIFF",8 => "TIFF",9 => "JPC",
10 => "JP2",11 => "JPX",12 => "JB2",
13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
$type=$types[$type]; $create="imagecreatefrom".$type;
$img=$create($imagename);
$new_img=imagerotate($img,$angle,0);
$save="image".$type; //显示
header("content-type:image/".$type);
$save($new_img); // 保存
// $save($new_img,"new_".$imagename); imagedestroy($img);
imagedestroy($new_img);
} rotate_image("ganlixin.jpg",-90); ?>

  

翻转图片

<?php
/**
* [overturn_image 翻转图片]
* @param [string] $imagename [要反转的图片名]
* @param [char] $method [按x轴或y轴翻转,只有x,y选项]
* @return [type] [description]
*/
function overturn_image($imagename,$method){
$method=strtolower($method);
list($width,$height,$type)=getimagesize($imagename);
$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
4 => "SWF",5 => "PSD",6 => "BMP",
7 => "TIFF",8 => "TIFF",9 => "JPC",
10 => "JP2",11 => "JPX",12 => "JB2",
13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
$type=$types[$type]; $create="imagecreatefrom".$type;
$img=$create($imagename);//源图片
$new_img=imagecreatetruecolor($width,$height);//翻转之后的图片 if($method=='y'){
for($i=0;$i<$width;$i++){
imagecopy($new_img,$img,$width-$i-1,0,$i,0,1,$height);
}
} else if($method=='x'){
for($i=0;$i<$height;$i++){
imagecopy($new_img,$img,0,$height-$i-1,0,$i,$width,1);
}
}
$save="image".$type; //显示
header("content-type:image/".$type);
$save($new_img); // 保存
// $save($new_img,"new_".$imagename); imagedestroy($img);
imagedestroy($new_img);
}
overturn_image("ganlixin.jpg","y");
?>

  

PHP利用GD库处理图片方法实现的更多相关文章

  1. Windows环境下php开启GD库的方法

    一.GD库是什么? GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印.在网站上GD库通常用来生成缩略图,或者用来对图片加 ...

  2. php学习笔记:利用gd库生成图片,并实现随机验证码

    说明:一些基本的代码我都进行了注释,这里实现的验证码位数.需要用的字符串都可以再设置.有我的注释,大家应该很容易能看得懂. 基本思路: 1.用mt_rand()随机生成数字确定需要获取的字符串,对字符 ...

  3. GD库imagecopyresampled()方法详解~

    整理了一下GD库这个缩放,拉伸复制的方法 因为这个函数参数太多了~ imagecopyresampled()   /* //拷贝部分图像并调整大小 bool imagecopyresampled ( ...

  4. PHP利用GD库绘图和生成验证码图片

    首先得确定php.ini设置有没有打开GD扩展功能,測试例如以下 print_r(gd_info()); 假设有打印出内容例如以下,则说明GD功能有打开: Array ( [GD Version] = ...

  5. PHP学习笔记:利用gd库给图片打图片水印

    <?php $dst_path = '1.jpg';//目标图片 $src_path = 'logo1.png';//水印图片 //创建图片的实例 $dst = imagecreatefroms ...

  6. thinkphp 利用GD库在图片上写文字

    <?php /** * Created by PhpStorm. * User: Administrator */ namespace Home\Event; use \Think\Image; ...

  7. PHP利用GD库画曲线

    效果: PHP代码 <?php Header('Content-type: image/png;Charset:utf-8'); //声明图片 $im = imagecreate(400,200 ...

  8. php 利用Gd库添加文字水印乱码的问题及解决方案

    最近一个项目进行了服务器迁移,部署后发现 ,其中一个为图片添加水印文字的功能出现了乱码问题,确认功能代码不存在问题,同时项目代码都是使用UTF-8编码,不存在编码问题,也检查排除了字体文件出现问题的可 ...

  9. php 简单的学习GD库绘制图片并传回给前端实现方式

    1.基本的GD库绘制图片汇总 2.后台实现小案例 <?php // $img = imagecreatetruecolor(200,40); // var_dump($img); // 利用GD ...

随机推荐

  1. ES5-ES6-ES7_const声明只读常量

    const 概述const声明一个只读的常量.一旦声明,常量的值就不能改变.const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值. // const P ...

  2. UOJ #390. 【UNR #3】百鸽笼

    UOJ #390. [UNR #3]百鸽笼 题目链接 看这道题之前先看一道相似的题目 [PKUWC2018]猎人杀. 考虑类似的容斥: 我们不妨设处理\(1\)的概率. 我们令集合\(T\)中的所有鸽 ...

  3. P2430 严酷的训练 题解

    题目背景 Lj的朋友WKY是一名神奇的少年,在同龄人之中有着极高的地位... 题目描述 他的老师老王对他的程序水平赞叹不已,于是下决心培养这名小子. 老王的训练方式很奇怪,他会一口气让WKY做很多道题 ...

  4. centos断网调试

    保存命令 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件 ...

  5. iframe获取父、子窗口的元素和方法

    原文地址:https://www.cnblogs.com/BlingSun/p/7484237.html jQuery.js调用iframe父窗口与子窗口元素的方法(亲测有效) 子页面获取父页面的id ...

  6. ceph 集群故障恢复

    集群规划配置 master1    172.16.230.21master2    172.16.230.22master3 172.16.230.23node1 172.16.230.26node2 ...

  7. 普通用户使用docker命令

    由于docker 都是root权限启动的容器, 要给研发 登录权限查看log,对于普通用,使用docker是会出现报错, 使用 gpasswd 命令把用户加入到docker组中 gpasswd -a ...

  8. (零 ) 天猫精灵接入Home Assistant-总说明

    天猫精灵设备管理 https://bbs.hassbian.com/tmall 自己的hass访问地址 http://[自己的IP或域名]:8123/states 自己的MQTT服务器访问 http: ...

  9. JavaScript高级程序设计学习(六)之设计模式

    每种编程语言都有其自己的设计模式.不禁让人疑惑设计模式是用来做什么?有什么用? 简单的说,设计模式是为了让代码更简洁,更优雅,更完美. 同时设计模式也会让软件的性能更好,同时也会让程序员们更轻松.设计 ...

  10. appbar导航

    import 'package:flutter/material.dart';import 'dart:ui'; void main()=>runApp(MyApp()); class MyAp ...