图片裁切,上传,自动匹配颜色。
- options.loadComplete
- options.loadError
- options.done
ColorThief.prototype.getColor = function(sourceImage, quality) {
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>demo2</title>
<style>
#result{
width:100px;
height: 100px;
}
.div1{
width: 100%;
height: 100px;
}
.div2{
width: 100%;
height: 100px;
}
.div3{
width: 100%;
height: 100px;
}
</style>
</head>
<body>
<script src="./src/color-thief.js"></script>
<script>
function readAsDataURL(){
//检验是否为图像文件
var file = document.getElementById("file").files[0];
if(!/image\/\w+/.test(file.type)){
alert("看清楚,这个需要图片!");
return false;
}
var reader = new FileReader();
//将文件以Data URL形式读入页面
reader.readAsDataURL(file);
reader.οnlοad=function(e){var result=document.getElementById("result");
let context = document.createElement('canvas');
context.setAttribute('width','200');
context.setAttribute('height','200');
let ctx = context.getContext('2d');
document.querySelector('body').appendChild(context)
let image = new Image();
image.src = e.target.result;image.onload = function(){
ctx.drawImage(image,0,0,100,100);
let context1 = document.createElement('canvas');
context1.setAttribute('width','200');
context1.setAttribute('height','200');
let ctx1 = context1.getContext('2d');
document.querySelector('body').appendChild(context1);let ctx1data = ctx.getImageData(0,0,100,10);
let ctx1data1 = ctx.getImageData(0,0,10,100);
let ctx1data2 = ctx.getImageData(90,0,10,100);
let ctx1data3 = ctx.getImageData(0,90,100,10);
console.log(ctx1data);let context2 = document.createElement('canvas');
context2.setAttribute('width','200');
context2.setAttribute('height','200');
let ctx2 = context2.getContext('2d');
document.querySelector('body').appendChild(context2);let context3 = document.createElement('canvas');
context3.setAttribute('width','200');
context3.setAttribute('height','200');
let ctx3 = context3.getContext('2d');
document.querySelector('body').appendChild(context3);let context4 = document.createElement('canvas');
context4.setAttribute('width','200');
context4.setAttribute('height','200');
let ctx4 = context4.getContext('2d');
document.querySelector('body').appendChild(context4);ctx1.putImageData(ctx1data,0,0); //top
ctx2.putImageData(ctx1data1,0,0);//left
ctx3.putImageData(ctx1data2,0,0);//right
ctx4.putImageData(ctx1data3,0,0);//bottomlet colorThief = new ColorThief();
result.style.background = `rgb(${colorThief.getColor(image)[0]},${colorThief.getColor(image)[1]},${colorThief.getColor(image)[2]})`;
let maincolor = colorThief.getColor(image);
console.log(result.style.background)
// console.log(colorThief.getColor(image)); 获取整张图片的主色
console.log(colorThief.getColor(context1));
console.log(colorThief.getColor(context2));
console.log(colorThief.getColor(context3));
console.log(colorThief.getColor(context4));
//获取四个边合在一起的平均色
//div2为四个边的平均
let colorR = (colorThief.getColor(context1)[0]+colorThief.getColor(context2)[0]+colorThief.getColor(context3)[0]+colorThief.getColor(context4)[0])/4
let colorG = (colorThief.getColor(context1)[1]+colorThief.getColor(context2)[1]+colorThief.getColor(context3)[1]+colorThief.getColor(context4)[1])/4
let colorB = (colorThief.getColor(context1)[2]+colorThief.getColor(context2)[2]+colorThief.getColor(context3)[2]+colorThief.getColor(context4)[2])/4
let colorRgb = `(${colorR},${colorG},${colorB})`; //rgb
console.log(colorRgb)
let showcolorrgb = document.createElement('div');
showcolorrgb.classList.add('div2');
showcolorrgb.innerHTML = '四个边的平均色'
showcolorrgb.setAttribute('style',`background:rgb${colorRgb}`);
document.querySelector('body').appendChild(showcolorrgb);//在六种颜色中找到最接近匹配颜色的颜色
//黄色:rgb(225,220,50),红色(180,72,78),蓝色(49,121,195),绿色(115,185,85),黑色(14,17,20),白色(255,255,255);
//div3为匹配后的颜色
let min = 442;
let numorder = 0;
let colorlist_Arr = [[225,220,50],[180,72,78],[49,121,195],[115,185,85],[14,17,20],[255,255,255]];
for(let z=0;z<6;z++){
let minA = Math.floor(Math.sqrt(Math.pow(colorlist_Arr[z][0]-colorR,2)+Math.pow(colorlist_Arr[z][1]-colorG,2)+Math.pow(colorlist_Arr[z][2]-colorB,2)));
console.log(minA)
if(minA<min){
min = minA;
numorder = z;
}}
let divv = document.createElement('div');
divv.classList.add('div3');
divv.innerHTML = '匹配后的颜色,六种颜色之1'
divv.setAttribute('style',`background:rgb(${colorlist_Arr[numorder][0]},${colorlist_Arr[numorder][1]},${colorlist_Arr[numorder][2]})`);
document.querySelector('body').appendChild(divv);//获取图片中的其他颜色
//div1为图片中其他色,第一个为主色
let colorThiefban = colorThief.getPalette(image, 8);
console.log(colorThiefban)
for(let i = 0;i<colorThiefban.length;i++){
let div = document.createElement('div');
div.classList.add('div1');
div.innerHTML = '图片中其他色,第一个为主色'
div.setAttribute('style',`background:rgb(${colorThiefban[i][0]},${colorThiefban[i][1]},${colorThiefban[i][2]})`);
document.querySelector('body').appendChild(div);
}
//显示文件
// result.innerHTML='<img src="' + e.target.result +'" alt="" />';
}}
}
</script>
<p>
<label>请选择一个文件:</label>
<input type="file" id="file" />
<input type="button" value="读取图像" οnclick="readAsDataURL()" />
</p>
<div id="result" name="result">为图片的主色</div>
</body>
</html>
转载于:https://www.cnblogs.com/qdcnbj/p/9588171.html
图片裁切,上传,自动匹配颜色。相关推荐
- thinkphp + 美图秀秀api 实现图片裁切上传,带数据库
思路: 1.数据库 创建test2 创建表img,字段id,url,addtime 2.前台页: 1>我用的是bootstrap 引入必要的js,css 2>引入美图秀秀的js 3.后台: ...
- php+美图秀秀,thinkphp + 美图秀秀api 实现图片裁切上传,带数据库
namespace Home\Controller; use Think\Controller; /** * 图片上传 */ class UploadController extends Contro ...
- 上传自动显示图片 代码
<html> <head> <title>上传自动显示图片</title> <script type="text/javas ...
- 泛微ECOLOGY9流程模块(建模通用)office附件上传自动转为图片并显示在流程指定附件字段中
泛微ECOLOGY9流程模块'建模通用'office附件上传自动转为图片并显示在流程指定附件字段中 目录说明 实现将office文件转为PDF文件及PDF文件转换为图片功能 1.首选在服务器中搭建环境 ...
- cropper.js 裁剪图片并上传(文档翻译+demo)(转)
官网http://fengyuanchen.github.io/cropper/ 文档https://github.com/fengyuanchen/cropper/blob/master/READM ...
- php 上传本地图片到服务器上,PHP如何将图片文件上传到另外一台服务器上
说,我有一个需求,就是一个临时功能.由于工作开发问题,我们有一个B项目,需要有一个商品添加的功能,涉及到添加商品内容,比如商品名字,商品描述,商品库存,商品图片等.后台商品添加的接口已经写完了,但是问 ...
- php.ini 米拓_图片无法上传问题“大集结”-米拓建站帮助中心
# 图片无法上传问题"大集结" 如果你在使用米拓系统上传图片或文件时,出现以下问题: 1. 上传图片时提示:创建水印目录失败 2. 后台发布的商品图片前台不显示 3. 图片无法上传 ...
- ajax 批量上传图片插件,TinyMCE多图片批量上传(Ajax)教程
需要用上插件:axupimgs 插件作者:莫若卿 支持版本:5.0.4+ 支持语言:仅中文 插件版本:1.6 一.axupimgs 插件作用: 这是一个tinymce多图片批量上传插件,支持拖拽文件添 ...
- Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档
Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...
最新文章
- php mysql备份脚本_MySQL备份脚本,mysql脚本
- 深度学习之四:常用模型和方法
- Send mail in ECC
- centos7 + VMware Workstation Pro
- java rest客户端_Java中的简单REST客户端
- vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn
- c++ string分割字符串split_Java字符串到数组的转换最后放大招
- EXCEL TIPS From Webs
- 人工智能历史回眸:达特茅斯会议
- 厦门理工学院1219 (zyf的童年) (纯C语言版本)
- 实现人脸手动祛痘效果---OpenCV-Python开发指南(60)
- XSS Filter Evasion Cheat Sheet 中文版
- 通讯与计算机网络在线作业,浙大秋通讯与计算机网络在线作业试题及答案
- 直销银行和网上银行区别
- 4598: [Sdoi2016]模式字符串
- MIT的计算机系课程设置
- k8s调度过程中的资源分配问题
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)--(转)
- css布局入门级实战之九宫格网格布局
- 51单片机---一起来学习DS1302可调时钟(stc89c52芯片)
热门文章
- java 27 - 4 反射之 通过反射获取成员变量并使用
- Java Daemon线程
- spring cloud API网关
- 【JVM】jstack和dump线程分析(2)
- Web安全1沙箱隔离
- A potentially dangerous Request.Form value was detected from the client问题处理
- 快速设置UITableView不同section对应于不同种类的cell
- 获取当前目录所有文件名 并且保存为1个00000.txt的文件文件bat
- titanium开发教程-04-11其他属性和方法
- 将Excel数据导入SQL Server数据库