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主题也是被各种大佬开发出来,十分钦佩,向大佬仰望,大声称赞:流批!!! 我在翻看各种主 ...
随机推荐
- Java 程序流程控制语句
顺序语句 语句:使用分号分隔的代码称作为一个语句 注意:没有写任何代码只是一个分号的时候,也是一条语句,称作空语句 顺序语句就是按照从上往下的顺序执行的语句 Scanner scanner = new ...
- JMicro微服务Hello World
概述 JMicro是本人开发的基于Java实现的微服务框架,前两天发布0.0.3正式版本,并已发布到maven中央仓库. 项目源码github:https://github.com/mynewworl ...
- ASP.Net Core5.0 EF Core使用记录
打算把之前开源的 基于ASP.Net Core开发一套通用后台框架 重新用ASP.Net Core 5写一遍,也算是巩固一下旧知识,学习下新知识.本文是项目搭建初期关于 EF Core 的使用记录 1 ...
- docker私有仓库搭建及使用
1.下载官方镜像 sudo docker pull registry 下载完成后,docker images可以查看到pull下来的镜像registry 2.启动registry容器,用于提供私有 ...
- 图像分类:CVPR2020论文解读
图像分类:CVPR2020论文解读 Towards Robust Image Classification Using Sequential Attention Models 论文链接:https:// ...
- HarmonyOS技术特性
HarmonyOS技术特性 硬件互助,资源共享 多种设备之间能够实现硬件互助.资源共享,依赖的关键技术包括分布式软总线.分布式设备虚拟化.分布式数据管理.分布式任务调度等. 分布式软总线 分布式软总线 ...
- Docker Context基本原理
Docker Context基本原理 介绍 本指南介绍了上下文如何使单个Docker CLI轻松管理多个Swarm集群.多个Kubernetes集群和多个单独的Docker节点. 单个Docker C ...
- 使用Keil语言的嵌入式C编程教程(下)
使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...
- Spring Cloud08: Hystrix 容错机制与数据监控
一.概述 容错机制是指的是在一个分布式系统中,每个微服务之间是相互调用的,并且他们之间相互依赖,而实际的运行情况中,可能会因为各种原因导致某个微服务不可用,那么依赖于这个微服务的其他微服务就可能出现响 ...
- VNC 相关
vncserver启动报错root A VNC server is already running as :1 [root@42 ~]# service vncserver startStarting ...