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主题也是被各种大佬开发出来,十分钦佩,向大佬仰望,大声称赞:流批!!! 我在翻看各种主 ...
随机推荐
- Centos7 搭建vsftpd
1.安装vsftpd 在线安装:yum -y install vsftpd 离线安装:下载vsftp的rpm包,通过rpm -ivh xxx.rpm安装 2.修改/etc/vsftpd/vsftpd. ...
- kylin的rowkey优化之调整rowkey顺序
在以hbase为存储的cuboid中,会有很多计算好的数据行,这每个行的key都是由维度值按顺序生成的rowkey 而这个顺序,在我们做cube设计的时候是可以调整的. 具体调整路径是:cube de ...
- System Verilog MCDF(一)
- F5 api接口开发实战(一)
本人从18年下旬,开始从事F5负载均衡的自动化开发工作,主要使用python编程语言,开发的F5功能模块为LTM和GTM. F5开发简介 1.F5管理模式 F5的管理模式主要有4种(不包含snmp), ...
- maven把依赖打进jar包
1.把依赖打进sigma-api的jar包 <?xml version="1.0" encoding="UTF-8"?> <project x ...
- MindInsight训练可视整体设计介绍
MindInsight训练可视整体设计介绍 MindInsight是MindSpore的可视化调试调优组件.通过MindInsight可以完成训练可视.性能调优.精度调优等任务. 训练可视功能主要包括 ...
- 单点突破:Set
HashSet HashSet存放的是散列值,它是按照元素的散列值来存取元素的. 元素的散列值通过hashCode方法计算 HashSet通过判断两个元素的Hash值是否相等,如果相等就会用equal ...
- 阿里云视频云 Retina 多媒体 AI 体验馆开张啦!
带你体验视频更多可能 海量视频管理难度大?翻库检索特定人物费时费力?视频内容剪辑效率低?您的得力助手"Retina多媒体AI"体验馆已上线.带你感受视频AI黑科技,开启极致智能体验 ...
- Samba 服务基础
配置SMB共享,跨平台的共享,Windows与Linux的共享 • Samba 软件项目 用途:为客户机提供共享使用的文件夹 协议:SMB(TCP 139).CIFS(TCP 445) • 所需软件包 ...
- Jenkins 安装使用笔记
系统要求 最低推荐配置: 256MB可用内存 1GB可用磁盘空间(作为一个容器docker运行jenkins的话推荐10GB) 为小团队推荐的硬件配置: 1GB+可用内存 50 GB+ 可用磁盘空间 ...