index.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <div style="margin: 10px">
  3. <div class="cropper-container">
  4. <Cropper ref="refCropper" :width="'40vw'" :src="img" />
  5. <img :src="cropperImg" class="croppered" v-if="cropperImg" />
  6. </div>
  7. <el-button type="primary" @click="onCropper">裁剪</el-button>
  8. <p v-if="cropperImg">裁剪后图片信息:{{ info }}</p>
  9. </div>
  10. </template>
  11. <script lang="ts">
  12. import { ref, nextTick, getCurrentInstance } from "vue";
  13. import Cropper from "/@/components/ReCropper";
  14. import img from "./picture.jpeg";
  15. export default {
  16. name: "reCropping",
  17. components: {
  18. Cropper
  19. },
  20. setup() {
  21. const instance = getCurrentInstance();
  22. let info = ref("");
  23. let cropperImg = ref("");
  24. const onCropper = (): void => {
  25. nextTick(() => {
  26. instance.refs.refCropper.cropper.getCroppedCanvas().toBlob(blob => {
  27. let fileReader: FileReader = new FileReader();
  28. fileReader.onloadend = (e: any) => {
  29. cropperImg.value = e.target.result;
  30. info.value = instance.refs.refCropper.cropper.getData();
  31. };
  32. fileReader.readAsDataURL(blob);
  33. }, "image/jpeg");
  34. });
  35. };
  36. return {
  37. img,
  38. info,
  39. cropperImg,
  40. onCropper
  41. };
  42. }
  43. };
  44. </script>
  45. <style scoped>
  46. .cropper-container {
  47. display: flex;
  48. justify-content: space-between;
  49. align-items: center;
  50. }
  51. .el-button {
  52. margin-top: 10px;
  53. }
  54. .croppered {
  55. display: block;
  56. width: 45%;
  57. height: 360px;
  58. }
  59. </style>