php自动识别背景并且把它改为白色
此源码有个阈值可以自己调节,精确度等自测
<?php/*$Colorimg = new Colorimg();$image=$Colorimg->IMGaction("G:/www/20161220/demo/5.jpg",1,1,50);//告诉浏览器以图片形式解析header('content-type:image/jpeg');imagejpeg($image, "G:/www/20161220/demo/3.jpg");*/class Colorimg{ public $image;//图片 private $cs;//比对阈值 public function IMGaction($imgurl,$if_url=1,$if_deflate=0,$cs='50') { if($if_url==1) { $image = $this->ImgcolorCRRATE($imgurl); }else{ $image = $imgurl; } if($if_deflate==1) { $image = $this->ImgDEFLATE($image); } //平均值 $sample = $this->ColorGETMEANrgb($image); $image=$this->ImgsetPIXEL($image,$sample,$cs); return $image; } /** * 打开一张图片 */ public function ImgcolorCRRATE($image) { list($width, $height) = getimagesize($image);//获取图片信息 $img_info = getimagesize($image); switch ($img_info[2]) { case 1: $img = imagecreatefromgif($image); break; case 2: $img = imagecreatefromjpeg($image); break; case 3: $img = imagecreatefrompng($image); break; } return $img; } /** * $rate为图片长宽最大值 */ public function ImgDEFLATE($image, $rate = '800') { $w = imagesx($image); $h = imagesy($image);//指定缩放出来的最大的宽度(也有可能是高度) $max = $rate;//根据最大值为300,算出另一个边的长度,得到缩放后的图片宽度和高度 if ($w > $h) { $w = $max; $h = $h * ($max / imagesx($image)); } else { $h = $max; $w = $w * ($max / imagesy($image)); }//声明一个$w宽,$h高的真彩图片资源 $i = imagecreatetruecolor($w, $h);//关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h) imagecopyresampled($i, $image, 0, 0, 0, 0, $w, $h, imagesx($image), imagesy($image)); return $i; } /** * 传入多维数组n个点计算平均值 *$rgbarrays=array( * $rgb1=array( * 'r'=>255, * 'g'=>255, * 'b'=>255 * ) * ) */ public function ColorRECKmean($rgbarrays) {//获取总共几个点 $sum = count($rgbarrays); $mean1['r'] = ''; $mean1['g'] = ''; $mean1['b'] = ''; foreach ($rgbarrays as $rbg) { $mean1['r'] += $rbg['r']; $mean1['g'] += $rbg['g']; $mean1['b'] += $rbg['b']; } $mean['r'] = intval($mean1['r'] / $sum); $mean['g'] = intval($mean1['g'] / $sum); $mean['b'] = intval($mean1['b'] / $sum); return $mean; } /** * 取四个点,返回平均点的rgb数组 */ public function ColorGETMEANrgb($image) { $rgb1 = imagecolorat($image, 0, 0); $rgb2 = imagecolorat($image, 0, imagesy($image) - 1); $rgb3 = imagecolorat($image, imagesx($image) - 1, 0); $rgb4 = imagecolorat($image, imagesx($image) - 1, imagesy($image) - 1);//平均值 $sample = $this->ColorRECKmean(array($this->ColorRGBresolved($rgb1)), $this->ColorRGBresolved($rgb2), $this->ColorRGBresolved($rgb3), $this->ColorRGBresolved($rgb4)); return $sample; } public function ImgsetPIXEL($image,$sample,$cs){ //如果相似就加一个白色的点 for ($x = 0; $x < imagesx($image); $x++) { for ($y = 0; $y < imagesy($image); $y++) { $rgb = imagecolorat($image, $x, $y); $than = $this->ColorTHANrgb($this->ColorRGBComp($this->ColorRGBresolved($rgb), $sample),$cs); if ($than) { $color = imagecolorallocate($image, 255, 255, 255); imagesetpixel($image, $x, $y, $color); } } } return $image; } /** * 比对颜色相似度 * $rgb1和$rgb2必须数组$rgb['r'].... */ public function ColorRGBComp($rgb1, $rgb2) { $tbsr = abs($rgb1['r'] - $rgb2['r']); $tbsg = abs($rgb1['g'] - $rgb2['g']); $tbsb = abs($rgb1['b'] - $rgb2['b']); $cv = sqrt(pow($tbsr, 2) + pow($tbsg, 2) + pow($tbsb, 2)); return $cv; } /** *把rgb颜色分解成数组 * */ function ColorRGBresolved($rgb) { $img['r'] = intval(($rgb >> 16) & 0xFF); $img['g'] = intval(($rgb >> 8) & 0xFF); $img['b'] = intval(($rgb) & 0xFF); return $img; } /** * 对比像素是否相似,相似返回true */ public function ColorTHANrgb($cv, $cs) { if ($cv <=$cs) { return true; } else { return false; } }}php自动识别背景并且把它改为白色的更多相关文章
- 关于将电脑背景+chrome等网页改成护眼豆沙绿
常用电脑的人都知道,白色等其他对比度大的颜色对眼伤害大,所以需换成柔和的豆沙绿,可长时间保证眼睛的不疲劳 windows浏览器: >>>>在桌面点右键,依次选属性(proper ...
- iOS8中如何将状态栏的字体颜色改为白色
网上的一些方法在我这行不通, 比如: UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent ...
- ios 将状态栏改为白色方法!
1在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO2 在需要改变状态栏颜色的ViewController中在ViewDidLoad方 ...
- IOS 将状态栏改为白色
1.将 View controller-based status bar appearance 删除(默认为 YES),或设置为YES 2.设置rootViewcontroller,如果为viewC ...
- CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)
CSS3边框: 1.CSS3圆角:border-radius 属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...
- Swift - 状态栏颜色显示(字体、背景)
ios上状态栏 就是指的最上面的20像素高的部分 状态栏分前后两部分,要分清这两个概念,后面会用到: 前景部分:就是指的显示电池.时间等部分: 背景部分:就是显示黑色或者图片的背景部分: 如下图:前景 ...
- 实现div毛玻璃背景
毛玻璃效果 ios里毛玻璃效果的使用非常多,本文介绍一个实现div毛玻璃背景的方法 CSS3 Filter CSS3的Filter主要用在图像的特效处理上,默认值为none,还有以下备选项: 1. ...
- 【Linux命令】setterm命令修改虚拟机颜色显示(目录及背景颜色)
VMware设置目录及颜色显示 进入linux界面,默认背景为黑色,字体为白色 一.setterm命令 setterm向终端写一个字符串到标准输出,调用终端的特定功能.在虚拟终端上使用,将会改变虚拟终 ...
- Hexo博客美化之蝴蝶(butterfly)主题魔改
Hexo是轻量级的极客博客,因为它简便,轻巧,扩展性强,搭建部署方便深受广大人们的喜爱.各种琳琅满路的Hexo主题也是被各种大佬开发出来,十分钦佩,向大佬仰望,大声称赞:流批!!! 我在翻看各种主 ...
随机推荐
- JavaSE 知识图谱
JAVA基础语法 DOS命令 JAVA介绍 JDK安装 JAVA环境的搭建 关键字 注释 标识符命名规则(编码规范) 字面值常量 进制转换 基本类型 变量(局部变量.静态变量) 运算符 表达式 控制语 ...
- linux(centos 7)下安装JDK,Tomcat,mysql 运行Maven 项目
一.在Linux中安装JDK 1. 将JDK上传到root下(任何位置均可以). 如图: 2. 用解压命令解压JDK tar -xvf (此处为jdk文件名) 如果是rpm包,执行rpm -i jdk ...
- 痞子衡嵌入式:串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP. 在嵌入式世界里,当我们提起XiP设备(支持代码原地 ...
- grasshopper之python电池执行逻辑
在grasshopper中,需要导入的包虽然不多,但是相当绕人,所要实现的操作往往找不到,暂时做个分类. 双击输入 python 电池: # 导入rhino 包 import Rhino #Rhino ...
- 夜晚场景图像ISP增强算法
夜晚场景图像ISP增强算法 输入输出接口 Input: (1)图像视频分辨率(整型int) (2)图像视频格式(RGB,YUV,MP4等) (3)摄像头标定参数(中心位置(x,y)和5个畸变 系数(2 ...
- NNVM AI框架编译器
NNVM AI框架编译器 深度学习已变得无处不在且不可或缺.看到对在多种平台(例如手机,GPU,IoT设备和专用加速器)上部署深度学习工作负载的需求不断增长.TVM堆栈弥合深度学习框架与面向性能或效率 ...
- iOS视频硬编码技术
iOS视频硬编码技术 一.iOS视频采集硬编码 基本原理 硬编码 & 软编码 硬编码:通过系统自带的Camera录制视频,实际上调用的是底层的高清编码硬件模块,即显卡,不使用CPU,速度快 软 ...
- 编译原理-一种词法分析器LEX原理
1.将所有单词的正规集用正规式描述 2.用正规式到NFA的转换算 得到识别所有单词用NFA 3.用NFA到DFA的转换算法 得到识别所有单词用DFA 4.将DFA的状态转换函数表示成二维数组 并与DF ...
- 11-05 File类
1. 通过File输出当前项目目录下的文件"myfile.txt"的名字,大小,最后修改时间. 最后修改时间格式如:2016-03-23 14:22:16 package com. ...
- jsp页面抽取
步骤: 1.先将jsp中要抽取的公共部分剪切出来,黏贴到新的jsp文件中,取名叫xxx.jsp 2.在需要引入此公共部分的jsp页面中使用<%@include file="xxx.js ...