当前位置:   article > 正文

uni-app 实现拍照后给照片加水印功能

uni-app 实现拍照后给照片加水印功能

遇到个需求需要实现,研究了一下后写了个demo

本质上就是把拍完照后的照片放到canvas里,然后加上水印样式然后再重新生成一张图片

代码如下,看注释即可~使用的话记得还是得优化下代码

  1. <template>
  2. <view class="content">
  3. <button @click="handlePhotoAndWatermask">测试按钮</button>
  4. <!-- uni-app必须要有一个canvas元素 -->
  5. <!-- 所以在这里放置一个并且将它隐藏起来 -->
  6. <view style="position: absolute; left: 9999px">
  7. <canvas
  8. canvas-id="myCanvas"
  9. :style="{ width: `${canvasWidth}px`, height: `${canvasHeight}px` }"
  10. ></canvas>
  11. </view>
  12. </view>
  13. </template>
  14. <script>
  15. export default {
  16. data() {
  17. return {
  18. canvasWidth: 300,
  19. canvasHeight: 150,
  20. }
  21. },
  22. methods: {
  23. handlePhotoAndWatermask() {
  24. // 调用拍照功能
  25. uni.chooseMedia({
  26. mediaType: ['image'],
  27. sourceType: ['camera'],
  28. maxDuration: 30,
  29. camera: 'back',
  30. success: (res) => {
  31. const filePath = res.tempFiles[0].tempFilePath
  32. // 获取图片宽高
  33. uni.getImageInfo({
  34. src: filePath,
  35. success: ({ width, height }) => {
  36. // 将canvas的宽高置成同样的宽高
  37. this.canvasWidth = width
  38. this.canvasHeight = height
  39. // 用this.$nextTick不行,第一次还是会按默认的300 * 150截取
  40. // setTimeout时间也不能太短,500ms左右
  41. setTimeout(() => {
  42. const ctx = uni.createCanvasContext('myCanvas')
  43. // 将图片放到canvas中
  44. ctx.drawImage(filePath, 0, 0, width, height)
  45. // 加上想要绘制的水印
  46. ctx.font = '50px system-ui'
  47. ctx.fillStyle = 'red'
  48. ctx.fillText('测试写入', 20, 100)
  49. ctx.draw()
  50. // 将canvas转化成图片
  51. uni.canvasToTempFilePath({
  52. canvasId: 'myCanvas',
  53. width: this.canvasWidth,
  54. height: this.canvasHeight,
  55. success: ({ tempFilePath }) => {
  56. // 可以对生成的图片做你需要的操作
  57. uni.previewImage({
  58. current: 0,
  59. urls: [tempFilePath],
  60. })
  61. },
  62. })
  63. }, 500)
  64. },
  65. fail() {
  66. console.error('获取图片详情失败')
  67. },
  68. })
  69. },
  70. })
  71. },
  72. },
  73. }
  74. </script>

最终展示效果如下~

PS: 这个只是小程序版,不过App端也是类似的实现方式~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/140061?site
推荐阅读
相关标签
  

闽ICP备14008679号