• js 将多张图片合并成一张图片


    其实就是将两张图片地址根据canvas组合在一起,我放到项目中因为会存在跨域问题,所以将图片转化成base64,后面还会带随机值,这样可避免图片跨域错误,正常情况下可以直接将图片放到canvas里面。

    灵感来源:js 将多张图片合并成一张图片

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>BOM案例 图片放大title>
    6. <script src="js/jquery-2.1.0.min.js">script>
    7. <link rel="stylesheet" type="text/css" href="./viewer/viewer.css" />
    8. <script src="./viewer/viewer.js" type="text/javascript" charset="utf-8">script>
    9. head>
    10. <body>
    11. <img id="img1" src="img/1.jpg" width="350" height="700" />
    12. <img id="img2" src="img/2021.png" width="350" height="700" />
    13. body>
    14. <script type="text/javascript">
    15. let img1Src = "";
    16. let img2Src = "";
    17. function getAjax(imageURL) {
    18. $.ajax({
    19. type: "GET",
    20. url: imageURL,
    21. beforeSend: function (xhr) {
    22. xhr.overrideMimeType('text/plain; charset=x-user-defined');
    23. },
    24. success: function (result, textStatus, jqXHR) {
    25. if (result.length < 1) {
    26. alert("The thumbnail doesn't exist");
    27. $("#thumbnail").attr("src", "data:image/png;base64,");
    28. return
    29. }
    30. var binary = "";
    31. var responseText = jqXHR.responseText;
    32. var responseTextLen = responseText.length;
    33. for (i = 0; i < responseTextLen; i++) {
    34. binary += String.fromCharCode(responseText.charCodeAt(i) & 255)
    35. }
    36. img1Src = "data:image/png;base64," + btoa(binary);
    37. // $("#thumbnail").attr("src", "data:image/png;base64," + btoa(binary));
    38. },
    39. error: function (xhr, textStatus, errorThrown) {
    40. alert("Error in getting document " + textStatus);
    41. }
    42. });
    43. }
    44. function getAjax2(imageURL) {
    45. $.ajax({
    46. type: "GET",
    47. url: imageURL,
    48. beforeSend: function (xhr) {
    49. xhr.overrideMimeType('text/plain; charset=x-user-defined');
    50. },
    51. success: function (result, textStatus, jqXHR) {
    52. if (result.length < 1) {
    53. alert("The thumbnail doesn't exist");
    54. $("#thumbnail").attr("src", "data:image/png;base64,");
    55. return
    56. }
    57. var binary = "";
    58. var responseText = jqXHR.responseText;
    59. var responseTextLen = responseText.length;
    60. for (i = 0; i < responseTextLen; i++) {
    61. binary += String.fromCharCode(responseText.charCodeAt(i) & 255)
    62. }
    63. img2Src = "data:image/png;base64," + btoa(binary);
    64. // $("#thumbnail").attr("src", "data:image/png;base64," + btoa(binary));
    65. },
    66. error: function (xhr, textStatus, errorThrown) {
    67. alert("Error in getting document " + textStatus);
    68. }
    69. });
    70. }
    71. getAjax('https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_0180fb8afe5f4241a26ef98902038fd1_184410_00.jpg');
    72. getAjax2('https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_11f3e7e9412643b39e7a88ed13bcf67b_002216_00.jpg');
    73. setTimeout(function () {
    74. drawAndShareImage("我是文字111", "我是文字222", "设备与行驶证合照");
    75. }, 500)
    76. // 将两张图片拼在一起
    77. function drawAndShareImage(li1, li2, title) {
    78. let fontPosition = 30; // 字体需要在上面,不影响图片信息
    79. var canvas = document.createElement("canvas");
    80. canvas.width = 800;
    81. canvas.height = 800 + fontPosition;
    82. var context = canvas.getContext("2d");
    83. context.rect(0, 0, canvas.width, canvas.height);
    84. context.fillStyle = "#fff";
    85. context.font = "28px serif";
    86. context.fill();
    87. console.log(img1Src.length)
    88. console.log(img2Src.length)
    89. if (img1Src.length == 0) {
    90. console.log("现在的版本没有图片")
    91. var myImage2 = new Image();
    92. // 解决跨域问题
    93. myImage2.setAttribute('crossOrigin', 'anonymous');
    94. myImage2.src = img2Src;//你自己本地的图片或者在线图片
    95. myImage2.crossOrigin = 'Anonymous';
    96. myImage2.onload = function () {
    97. context.drawImage(myImage2, fontPosition, fontPosition, canvas.width - fontPosition - fontPosition, canvas.height - fontPosition - fontPosition); // 第二张图片的位置 margin-left margin-top width height
    98. context.fillStyle = '#000';
    99. context.fillText(li2, canvas.width / 2.5, 25); // 第二个图片的文字信息
    100. context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息
    101. var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
    102. const imgDom = document.createElement('img');
    103. imgDom.src = base64;
    104. imgDom.id = "imgimg";
    105. imgDom.style.display = "none";
    106. document.body.appendChild(imgDom);
    107. var viewer = new Viewer(document.getElementById('imgimg'), {
    108. url: 'src'
    109. });
    110. $("#imgimg").click();
    111. }
    112. } else if (img2Src.length == 0) {
    113. console.log("历史的版本没有图片")
    114. var myImage = new Image();
    115. // 解决跨域问题
    116. myImage.setAttribute('crossOrigin', 'anonymous');
    117. myImage.src = img1Src;//你自己本地的图片或者在线图片
    118. myImage.crossOrigin = 'Anonymous';
    119. myImage.onload = function () {
    120. context.drawImage(myImage, fontPosition, fontPosition, canvas.width - fontPosition - fontPosition, canvas.height - fontPosition - fontPosition); // 第二张图片的位置 margin-left margin-top width height
    121. context.fillStyle = '#000';
    122. context.fillText(li1, canvas.width / 2.5, 25); // 第二个图片的文字信息
    123. context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息
    124. var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
    125. const imgDom = document.createElement('img');
    126. imgDom.src = base64;
    127. imgDom.id = "imgimg";
    128. imgDom.style.display = "none";
    129. document.body.appendChild(imgDom);
    130. var viewer = new Viewer(document.getElementById('imgimg'), {
    131. url: 'src'
    132. });
    133. $("#imgimg").click();
    134. }
    135. } else {
    136. console.log("都有图片")
    137. var myImage = new Image();
    138. // 解决跨域问题
    139. myImage.setAttribute('crossOrigin', 'anonymous');
    140. myImage.src = img1Src;//背景图片你自己本地的图片或者在线图片
    141. myImage.crossOrigin = 'Anonymous';
    142. // 两张图片合并成一张代码
    143. myImage.onload = function () {
    144. context.drawImage(myImage, 0, fontPosition, (canvas.width / 2) - 5, canvas.height - fontPosition - fontPosition); // 第一张图片的位置 margin-left margin-top width height
    145. context.fillStyle = '#000';
    146. context.fillText(li1, canvas.width / 5, 25); // 第一个图片的文字信息
    147. context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息
    148. var myImage2 = new Image();
    149. // 解决跨域问题
    150. myImage2.setAttribute('crossOrigin', 'anonymous');
    151. myImage2.src = img2Src;//你自己本地的图片或者在线图片
    152. myImage2.crossOrigin = 'Anonymous';
    153. myImage2.onload = function () {
    154. context.drawImage(myImage2, (canvas.width / 2) + 5, fontPosition, (canvas.width / 2) - 5, canvas.height - fontPosition - fontPosition); // 第二张图片的位置 margin-left margin-top width height
    155. context.fillStyle = '#000';
    156. context.fillText(li2, canvas.width - canvas.width / 3, 25); // 第二个图片的文字信息
    157. context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息
    158. var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
    159. const imgDom = document.createElement('img');
    160. imgDom.src = base64;
    161. imgDom.id = "imgimg" + Math.floor(Math.random() * 60);
    162. imgDom.style.display = "none";
    163. document.body.appendChild(imgDom);
    164. console.log(imgDom.id)
    165. var viewer = new Viewer(document.getElementById(imgDom.id), {
    166. url: 'src'
    167. });
    168. $("#" + imgDom.id).click();
    169. }
    170. }
    171. }
    172. }
    173. // getImage("https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_0180fb8afe5f4241a26ef98902038fd1_184410_00.jpg")
    174. // getImage2("https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_11f3e7e9412643b39e7a88ed13bcf67b_002216_00.jpg")
    175. // function getImage(url) {
    176. // const xhr = new XMLHttpRequest()
    177. // xhr.onload = function () {
    178. // const url_blob = URL.createObjectURL(this.response)
    179. // const image = new Image()
    180. // image.src = url_blob;
    181. // img1Src = url_blob;
    182. // }
    183. // // url 图片的地址
    184. // xhr.open('GET', url, true)
    185. // xhr.responseType = 'blob'
    186. // xhr.send()
    187. // }
    188. // function getImage2(url) {
    189. // const xhr = new XMLHttpRequest()
    190. // xhr.onload = function () {
    191. // const url_blob = URL.createObjectURL(this.response)
    192. // const image = new Image()
    193. // image.src = url_blob;
    194. // img2Src = url_blob;
    195. // }
    196. // // url 图片的地址
    197. // xhr.open('GET', url, true)
    198. // xhr.responseType = 'blob'
    199. // xhr.send()
    200. // }
    201. // function drawAndShareImage(li1, li2, title) {
    202. // let fontPosition = 30; // 字体需要在上面,不影响图片信息
    203. // var canvas = document.createElement("canvas");
    204. // canvas.width = 800;
    205. // canvas.height = 800 + fontPosition;
    206. // var context = canvas.getContext("2d");
    207. // context.rect(0, 0, canvas.width, canvas.height);
    208. // context.fillStyle = "#fff";
    209. // context.font = "28px serif";
    210. // context.fill();
    211. // var myImage = new Image();
    212. // // 解决跨域问题
    213. // myImage.setAttribute('crossOrigin', 'anonymous');
    214. // myImage.src = img1Src;//背景图片你自己本地的图片或者在线图片
    215. // myImage.crossOrigin = 'Anonymous';
    216. // // 两张图片合并成一张代码
    217. // myImage.onload = function () {
    218. // context.drawImage(myImage, 0, fontPosition, canvas.width / 2, canvas.height - fontPosition - fontPosition); // 第一张图片的位置 margin-left margin-top width height
    219. // context.fillStyle = '#000';
    220. // context.fillText(li1, canvas.width / 5, 25); // 第一个图片的文字信息
    221. // var myImage2 = new Image();
    222. // // 解决跨域问题
    223. // myImage2.setAttribute('crossOrigin', 'anonymous');
    224. // myImage2.src = img2Src;//你自己本地的图片或者在线图片
    225. // myImage2.crossOrigin = 'Anonymous';
    226. // myImage2.onload = function () {
    227. // context.drawImage(myImage2, (canvas.width / 2) + 1, fontPosition, (canvas.width / 2) - 1, canvas.height - fontPosition - fontPosition); // 第二张图片的位置 margin-left margin-top width height
    228. // context.fillStyle = '#000';
    229. // context.fillText(li2, canvas.width - canvas.width / 3, 25); // 第二个图片的文字信息
    230. // context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息
    231. // var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
    232. // const imgDom = document.createElement('img');
    233. // imgDom.src = base64;
    234. // imgDom.id = "imgimg";
    235. // imgDom.style.display = "none";
    236. // document.body.appendChild(imgDom);
    237. // var viewer = new Viewer(document.getElementById('imgimg'), {
    238. // url: 'src'
    239. // });
    240. // $("#imgimg").click();
    241. // }
    242. // }
    243. // }
    244. // function getBase64Image (src) {
    245. // return new Promise(resolve => {
    246. // const img = new Image()
    247. // img.crossOrigin = ''
    248. // img.src = src
    249. // img.onload = function () {
    250. // const canvas = document.createElement('canvas')
    251. // canvas.width = img.width
    252. // canvas.height = img.height
    253. // const ctx = canvas.getContext('2d')
    254. // ctx?.drawImage(img, 0, 0, img.width, img.height)
    255. // const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
    256. // const dataURL = canvas.toDataURL('image/' + ext)
    257. // console.log(dataURL)
    258. // $("#img1").attr("src", dataURL)
    259. // resolve(dataURL)
    260. // }
    261. // })
    262. // }
    263. // getBase64Image("https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_0180fb8afe5f4241a26ef98902038fd1_184410_00.jpg")
    264. // 将两张图片拼在一起
    265. // function drawAndShareImage(img1, img2) {
    266. // var canvas = document.createElement("canvas");
    267. // canvas.width = 700;
    268. // canvas.height = 700;
    269. // var context = canvas.getContext("2d");
    270. // context.rect(0, 0, 350, 350);
    271. // context.fillStyle = "#fff";
    272. // context.fill();
    273. // var myImage = new Image();
    274. // myImage.src = img1;//背景图片你自己本地的图片或者在线图片
    275. // myImage.crossOrigin = 'Anonymous';
    276. // // 两张图片合并成一张代码
    277. // myImage.onload = function () {
    278. // context.drawImage(myImage, 0, 0, 350, 350); // 第一张图片的位置 margin-left margin-top width height
    279. // context.font = "20px";
    280. // context.fillText("我是文字", 150, 150); // 第一个图片的文字信息
    281. // var myImage2 = new Image();
    282. // myImage2.src = img2;//你自己本地的图片或者在线图片
    283. // myImage2.crossOrigin = 'Anonymous';
    284. // myImage2.onload = function () {
    285. // context.drawImage(myImage2, 350, 0, 350, 350); // 第一张图片的位置 margin-left margin-top width height
    286. // context.font = "20px";
    287. // context.fillText("我是文字", 450, 150); // 第二个图片的文字信息
    288. // var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
    289. // const imgDom = document.createElement('img');
    290. // imgDom.src = base64;
    291. // document.body.appendChild(imgDom);
    292. // return base64
    293. // }
    294. // }
    295. // }
    296. script>
    297. html>
  • 相关阅读:
    人体状态检测YOLOV8 NANO
    【OpenPCDet】稀疏卷积SPConv-v1.2代码解读(2)
    HttpServletResponse对象
    给定一个二进制数组,计算其中最大连续1的个数
    除了走路,40-60岁的人,还可以进行哪些运动?3种运动可供参考
    基于Jenkins实现的CI/CD方案
    软件设计原则-依赖倒置原则讲解以及代码示例
    (02)Cartographer源码无死角解析-(17) SensorBridge→里程计数据处理与TfBridge分析
    Talk Is Cheap,Show Me The Code: 三种语言个人框架压测(Java/Go/Rust)
    盘点7种JavaScript常用设计模式
  • 原文地址:https://blog.csdn.net/Benxiaohai_311/article/details/134463258