<template> <div id="pdf_3" v-if="vshowD"> <div style="width: 1750px;"> <template v-for="(i,index) in feature.detailsImageList"> <img :key="index+100000" :src="i" style="width:100%;display: block;"> </template> </div> </div> </template> <script> import Header from "./components/header"; export default { components: { Header }, props: ['dataAll', 'tripList', 'orderMsg', 'orderTripdiff', 'vshowD', 'vshowK','feature'], data() { return { title: this.$t('objFill.v101.LeaveGroupDownload.beijmdlsg'), day: 'DAY', backgroundColor: '', backgroundColor2: '', textColor: '', textColorOne: '', }; }, methods: { getHtmlPlainText(html_str) { //提取字符串中的文字 let re = new RegExp('<[^<>]+>', 'g') if (html_str) { let text = html_str.replace(re, '') return text } else { return '' } }, getFontSize(title) { let size = 30; if (title && title.length > 0 && title.length > 80) { var tempSize = Number(80) / Number(title.length); tempSize = tempSize * 30; size = tempSize.toFixed(1); } return size + "px"; }, getImgColor(img, id) { return "#fff" }, // 获取图片颜色 canvasImgColor(imgs, ids, callback) { var imgSrc = imgs var upload = document.getElementById(ids) const imgEle = document.createElement('img') const canvas = document.createElement('canvas') imgEle.src = imgSrc imgEle.crossOrigin = ''; imgEle.onload = () => { var ctx = canvas.getContext("2d"); var naturalImgSize = [imgEle.naturalWidth, imgEle.naturalHeight]; canvas.width = naturalImgSize[0]; canvas.height = naturalImgSize[1]; //绘制到canvas ctx.drawImage(imgEle, 0, 0); //获取imageData:rgba像素点 var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); const leftSectionData = [] const rightSectionData = [] const oneLineImgDataLen = canvas.width * 4; imgData.data.forEach((colorVal, i) => { if (i % oneLineImgDataLen <= 0.5 * oneLineImgDataLen || i % oneLineImgDataLen >= 0.6 * oneLineImgDataLen) { const inLeft = i % oneLineImgDataLen <= 0.5 * oneLineImgDataLen if (i % 4 === 0) { // 获取rgb均值 const curAverageRGB = (imgData.data[i] + imgData.data[i + 1] + imgData.data[i + 2]) / 3; let leftOrRightRef = inLeft ? leftSectionData : rightSectionData; //每个数组里存四个值:本颜色值中的r、g、b的均值,以及r、g、b三个值。 //均值一方面用于累加计算本区域的整体均值,然后再跟每个均值对比拿到与整体均值最接近的项的索引,再取该数组里的后三个值:rgb,对应着颜色 leftOrRightRef[leftOrRightRef.length] = [curAverageRGB, imgData.data[i], imgData.data[i + 1], imgData.data[i + 2] ] } } }) //generate average rgb const averageOfLeft = Math.round(leftSectionData.reduce((_cur, item) => { return _cur + item[0] }, 0) / leftSectionData.length) const averageOfRight = Math.round(rightSectionData.reduce((_cur, item) => { return _cur + item[0] }, 0) / rightSectionData.length) //find the most near color const findNearestIndex = (averageVal, arrBox) => { let _gapValue = Math.abs(averageVal - arrBox[0]) let _nearColorIndex = 0 arrBox.forEach((item, index) => { const curGapValue = Math.abs(item - averageVal) if (curGapValue < _gapValue) { _gapValue = curGapValue _nearColorIndex = index } }) return _nearColorIndex } const leftNearestColor = leftSectionData[findNearestIndex(averageOfLeft, leftSectionData)] const rightNearestColor = rightSectionData[findNearestIndex(averageOfRight, rightSectionData)] upload.style.backgroundColor = `rgba(${leftNearestColor[1]},${leftNearestColor[2]},${leftNearestColor[3]},1) 0%,rgba(${rightNearestColor[1]},${rightNearestColor[2]},${rightNearestColor[3]},1)` callback(upload.style.backgroundColor) } } }, computed: {}, watch: { dataAll: { handler(val, oldVal) { if (val && val.tripColor) { this.backgroundColor = this.hexToRgb(val.tripColor, 0.2) this.backgroundColor2 = this.hexToRgb(val.tripColor, 0.1) let rgba = this.hexToRgb(val.tripColor, 1) rgba = rgba.split(',') let rgba0 = rgba[0].split('(') let arr = [rgba0[1], rgba[1], rgba[2]] if (this.getRgbLevel(arr) > 50) { this.textColor = "#fff" } else { this.textColor = "#333" } } }, deep: true, immediate: true }, tripList: { handler(val, oldVal) { }, deep: true, immediate: true }, }, mounted() { } }; </script> <style> </style>