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主题也是被各种大佬开发出来,十分钦佩,向大佬仰望,大声称赞:流批!!! 我在翻看各种主 ...
随机推荐
- IIC通信时遇到问题的解决
如果遇到问题,反复查不到 就DEBUG 下单点运行,执行每一个SCK 和SDA的拉高拉低 看看是否能正常的拉高拉低 先解决掉底层的GPIO的控制问题, 有的时候可能数据引脚为特殊功能引脚
- 10.9 ping:测试主机之间网络的连通性
ping命令 可用于测试主机之间网络的连通性.执行ping命令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而可得知该主机运作正常. ping命令 ...
- 10.21 nmap:网络探测工具和安全/端口扫描器
nmap命令 是一款开放源代码的网络探测和安全审核工具,是Network Mapper的缩写.其设计目标是快速地扫描大型网络.nmap可以发现网络上有哪些主机,主机提供了什么服务(应用程序名称和版本号 ...
- 痞子衡嵌入式:快速定位i.MXRT600板级设计ISP[2:0]启动模式引脚上电时序问题的方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种快速定位i.MXRT600板级设计ISP[2-0]启动模式引脚上电时序问题的方法. 我们知道恩智浦i.MXRT600是主打音频市场的 ...
- jQuery的链式编程风格
jQuery的链式编程风格 首先本人通过一个案例来展示jQuery的链式编程风格.先写一个页面,展示一个列表,代码如下: <body> <div> <ul class=& ...
- idea开发web项目框架失效和无法启动问题
不会配置idea的javaweb环境的小伙伴可以点击此链接 idea最新版,配置javaweb环境 很多小伙伴用idea开发web项目可能会出现所有代码都写对了但是无论如何都没法运行的情况,eclip ...
- 快速人体姿态估计:CVPR2019论文阅读
快速人体姿态估计:CVPR2019论文阅读 Fast Human Pose Estimation 论文链接: http://openaccess.thecvf.com/content_CVPR_201 ...
- 电阻存储器为edge-AI提供了仿生架构
电阻存储器为edge-AI提供了仿生架构 Resistive memories enable bio-inspired architectures for edge AI 近年来,脑启发计算领域的研究 ...
- Selenium-python 之弹窗处理
在Selenium-python 中,有时候需要对弹窗进行处理,比如获取弹窗上的内容.确定.取消.在弹窗上输入内容后点击确定-再次点出弹窗,需要专门的处理. 一.获取弹窗的内容 driver.find ...
- thymeleaf——th:each、th:if的使用
一.th:each 作用:用于遍历controller层发送过来的集合. 例: Controller代码: @Controller public class HelloController { @Re ...