±¾Ìû×îºóÓÉ xue5hen ÓÚ 2022-12-16 12:49 ±à¼
¡¾ÔÀí·ÖÎö¡¿
ΪÁ˱ãÓÚ·ÖÎöÔÀí£¬ÎÒдÁËÒ»¸ö¼òµ¥µÄDemo£¬ÈçÏÂͼËùʾ£¬ÔÚDemoÒ³ÃæÖÐÓÐÈýÕŵ¥É«Í¼Æ¬£¬µÚÒ»ÕÅÔʼͼÊÇÑÕɫΪ#999µÄ»ÒɫͼƬ£¬µÚ¶þÕÅˮӡͼÊÇÑÕɫΪ#fff͸Ã÷¶ÈΪ0.7µÄͼƬ£¬µÚÈýÕŽá¹ûͼÊÇÇ°Á½ÕÅͼƬºÏ³ÉÒÔºóµÃµ½µÄͼƬ¡£
ÔÚÓÒ²àµÄ¿ØÖÆ̨´òÓ¡³öÁËÕâÈýÕÅͼƬµÄÊý¾Ý£¨Êý¾ÝÊÇͨ¹ýcanvas»²¼ÖеÄgetImageData·½·¨»ñÈ¡µ½µÄ£©£¬´ÓÊý¾ÝÖпÉÒÔ¿´µ½£¬ÈýÕÅͼƬµÄ¿í¸ß¾ùΪ100ÏñËØ£¬Êý¾Ý³¤¶È¾ùΪ40000¡£¿ÉÒÔ¿´³ö£¬Ã¿ÕÅͼƬÓÐ100*100¸öÏñËص㣬ÿ¸öÏñËصãÓÃ4¸ö³¤¶ÈÀ´±íʾ£¬·Ö±ðÊÇR£¨ºì£©¡¢G£¨ÂÌ£©¡¢B£¨À¶£©¡¢A£¨Í¸Ã÷¶È£©¡£
½ÓÏÂÀ´£¬¶Ô±ÈÏÂÈýÕÅͼƬÊý¾ÝÓкβ»Í¬£¬ÔͼƬºÍˮӡͼµÄÊý¾ÝÊÇÔõôµÃµ½½á¹ûͼµÄÊý¾ÝµÄ£¿ÉÔ΢Ïëһϣ¬Ó¦¸Ã¿ÉÒԵóöÒ»¸ö˼·£ºË®Ó¡Í¼µÄ͸Ã÷¶ÈΪ0.7£¬Òâζ×ÅËüµÄÉ«ÖµÔÚ½á¹ûͼÖÐÕ¼µÄ±ÈÖØÊÇ70%£¬ÔʼͼÒòΪ±»Ë®Ó¡Í¼ÕÚµ²£¬ËùÒÔÕ¼µÄ±ÈÖØÊÇÊ£ÓàµÄ30%¡£ÓÚÊÇ£¬153 ¡Á 0.3 + 255 ¡Á 0.7= 224.4£¬ÏòÉÏÈ¡ÕûºóΪ225£¬ÕýºÃÓë½á¹ûͼÖÐÊý¾ÝÏàµÈ¡£
¡¾¹¦ÄÜʵÏÖ¡¿
ʵ¼ùÊǼìÑéÀíÂÛµÄΨһÊֶΡ£¸ù¾ÝÉÏÊö²Â²âµÄ¼ÆË㷽ʽ£¬Èç¹ûÒÑÖª½á¹ûͼºÍˮӡͼ£¬ÄÇôӦ¸Ã¾Í¿ÉÒÔÍÆËã³öÀ´Ôʼͼ¡£²»¹ýÐèҪ׼±¸ºÃÓë´ý´¦ÀíͼƬÏà¶ÔÓ¦µÄˮӡͼƬ£¬È·±£ËüÃǵijߴç´óСºÍˮӡλÖÃÊÇÒ»Öµģ¬·ñÔò¿¿³ÌÐò×Ô¼ºÈ¥²Â²âˮӡλÖõĻ°£¬ÐèÒª¶îÍ⸴ÔÓµÄËã·¨ºÍºÜ´óµÄ¼ÆËãÁ¿Ö§³Å¡£
ÕâÀïÎÒÉè¼ÆµÄ³ÌÐò½çÃæÈçÏ£º
³ÌÐòÉÏ·½ÊDzÎÊýÅäÖ㬿ÉÒÔÉèÖÃˮӡͼƬºÍÏÂÔØĿ¼£¬×ó²àÇøÓòÊÇ´ý´¦ÀíͼƬÁбíÇø£¬¿ÉÒÔ½«´ý´¦ÀíµÄͼƬÍÏק½øÀ´£¬ÓÒ²àÇøÓòÊÇͼƬԤÀÀÇøÓò£¬µãÑ¡×ó²àijһÌõÊý¾Ý¿ÉÒÔ¶ÔÆä½øÐÐÔ¤ÀÀ¡£
³ÌÐòȥˮӡµÄ¹Ø¼ü´úÂëÈçÏ£º
[JavaScript] ´¿Îı¾²é¿´ ¸´ÖÆ´úÂë // »ñÈ¡imgData
getImgData (imgObj) {
let canvasObj = document.createElement('canvas')
canvasObj.width = imgObj.width
canvasObj.height = imgObj.height
let ctx = canvasObj.getContext('2d')
ctx.drawImage(imgObj, 0, 0, canvasObj.width, canvasObj.height)
let imgData = ctx.getImageData(0, 0, canvasObj.width, canvasObj.height)
return imgData.data
}
[JavaScript] ´¿Îı¾²é¿´ ¸´ÖÆ´úÂë let imgData = this.imagesList[index].imgData
let imgData_sy = this.watermarkInfo.imgData
if (imgData.length !== imgData_sy.length) {
this.$toast('´ý´¦ÀíͼƬÓëˮӡͼƬ´óС²»Ò»ÖÂ')
return reject('´ý´¦ÀíͼƬÓëˮӡͼƬ´óС²»Ò»ÖÂ')
}
let bakColor = null
for (let i = imgData.length - 4; i > -1; i -= 4) {
if (!imgData_sy[i + 3]) {
bakColor = [imgData[i + 0], imgData[i + 1], imgData[i + 2], imgData[i + 3]]
continue
} else if (imgData_sy[i + 3] === 255 && bakColor) {
imgData[i + 0] = bakColor[0]
imgData[i + 1] = bakColor[1]
imgData[i + 2] = bakColor[2]
imgData[i + 3] = bakColor[3]
continue
}
let opacity_sy = imgData_sy[i + 3] / 255
let opacity_raw = (255 - imgData_sy[i + 3]) / 255
imgData[i + 0] = (imgData[i + 0] - imgData_sy[i + 0] * opacity_sy) / opacity_raw
imgData[i + 1] = (imgData[i + 1] - imgData_sy[i + 1] * opacity_sy) / opacity_raw
imgData[i + 2] = (imgData[i + 2] - imgData_sy[i + 2] * opacity_sy) / opacity_raw
if (imgData[i + 3] > 0 && imgData[i + 3] < 255) {
imgData[i + 3] = (imgData[i + 3] - imgData_sy[i + 3]) / opacity_raw
}
}
this.imagesList[index].imgData = imgData
// imgData2dataUrl
let canvasObj = document.createElement('canvas')
canvasObj.width = item.imgObj.width
canvasObj.height = item.imgObj.height
let ctx = canvasObj.getContext('2d')
let imageData = new ImageData(imgData, canvasObj.width, canvasObj.height)
ctx.putImageData(imageData, 0, 0)
¾²â£¬³£¼ûµÄˮӡ¿ÉÒÔÕý³£È¥³ý£»¶ÔÓÚ²»Í¸Ã÷µÄˮӡ£¬ÕâÀï²ÉÓõÄÊÇʹÓø½½üµÄͼƬɫֵÀ´Ìæ´ú£»¼ÙÉèÔʼͼƬ±¾ÉíÒ²ÊÇ°ë͸Ã÷£¬ÕâÖÖÇé¿öÏ£¬Í¸Ã÷¶ÈºÃ¼ÆË㣬µ«É«Öµ¼ÆËã´æÔÚЩÐíÎó²î£¬²»¹ýºÃÔÚÕâÖÖÇé¿öÔÚÏÖʵÖÐÏà¶Ô½ÏÉÙ¡£
ͼƬȥˮӡÕâÖÖ¹¦ÄÜ£¬ÓÃͼÎıí´ï¶àÉÙÓеã²Ô°×£¬¸½ÉÏÊÓƵչʾ£ºhttps://www.bilibili.com/video/BV1KV4y1A7wT/
|