- Timestamp:
- 2021-11-24T10:57:13+13:00 (2 years ago)
- Location:
- main/trunk/model-interfaces-dev/atea/ocr
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/model-interfaces-dev/atea/ocr
- Property svn:ignore
-
old new 1 1 dist 2 node_modules
-
- Property svn:ignore
-
main/trunk/model-interfaces-dev/atea/ocr/src/components/EditPage.vue
r35734 r35743 1 1 <template> 2 <div class=" root">2 <div class="edit-page-root"> 3 3 <div class="image-panel"> 4 <table v-if="rotateMode" class="rotate-guide"> 5 <tr><hr /></tr> 6 <tr><hr /></tr> 7 <tr><hr /></tr> 8 <tr><hr /></tr> 9 <tr><hr /></tr> 10 <tr><hr /></tr> 11 <tr><hr /></tr> 12 <tr><hr /></tr> 13 <tr><hr /></tr> 14 <tr><hr /></tr> 15 <tr><hr /></tr> 16 <tr><hr /></tr> 17 </table> 18 19 <!-- <img :src="imageUrl" class="image" :style="{ filter: filterString, transform: transformString }" /> --> 20 <div class="image-container"> 21 <img v-if="rotateMode" src="images/rotate_arrow_64.png" class="rotate-handle rotate-tl" /> 22 <img v-if="rotateMode" src="images/rotate_arrow_64.png" class="rotate-handle rotate-tr" /> 23 <img v-if="rotateMode" src="images/rotate_arrow_64.png" class="rotate-handle rotate-bl" /> 24 <img v-if="rotateMode" src="images/rotate_arrow_64.png" class="rotate-handle rotate-br" /> 25 26 <img :src="imageUrl" class="image" :style="{ filter: filterString, transform: transformString }" /> 4 <div class="image-container" :style="{ transform: transformString }"> 5 <img v-if="rotateMode" src="images/rotate-arrow.svg" class="rotate-handle rotate-tl" @mousedown="allowRotation = true" draggable="false" /> 6 <img v-if="rotateMode" src="images/rotate-arrow.svg" class="rotate-handle rotate-tr" @mousedown="allowRotation = true" draggable="false" /> 7 <img v-if="rotateMode" src="images/rotate-arrow.svg" class="rotate-handle rotate-bl" @mousedown="allowRotation = true" draggable="false" /> 8 <img v-if="rotateMode" src="images/rotate-arrow.svg" class="rotate-handle rotate-br" @mousedown="allowRotation = true" draggable="false" /> 9 10 <table v-if="rotateMode" class="rotate-guide" :style="{ transform: transformStringInverted }"> 11 <tr><td><hr /></td></tr> 12 <tr><td><hr /></td></tr> 13 <tr><td><hr /></td></tr> 14 <tr><td><hr /></td></tr> 15 <tr><td><hr /></td></tr> 16 <tr><td><hr /></td></tr> 17 <tr><td><hr /></td></tr> 18 <tr><td><hr /></td></tr> 19 <tr><td><hr /></td></tr> 20 <tr><td><hr /></td></tr> 21 <tr><td><hr /></td></tr> 22 <tr><td><hr /></td></tr> 23 </table> 24 25 <img ref="image" :src="imageUrl" class="image" :style="{ filter: filterString }" /> 27 26 </div> 28 27 </div> … … 45 44 46 45 <style lang="scss" scoped> 47 . root {46 .edit-page-root { 48 47 display: grid; 49 48 grid-template-columns: 1fr auto; 50 grid-template-rows: 100%;51 49 align-items: center; 52 50 justify-items: center; … … 65 63 66 64 .image { 67 max-width: 100%;68 height: auto;65 max-width: 70vw; 66 max-height: 70vh; 69 67 } 70 68 71 69 .image-container { 72 max-width: 70%;73 max-height: 70%;74 70 position: relative; 75 71 margin: auto; 76 padding: 1em; 72 padding: 1.5em; 73 user-select: none; 77 74 78 75 .rotate-handle { 79 76 height: 2em; 80 77 position: absolute; 78 z-index: 5; 81 79 82 80 // Generated with https://codepen.io/sosuke/pen/Pjoqqp using var(--primary-bg-color) 83 filter: invert(16%) sepia(100%) saturate(3091%) hue-rotate(347deg) brightness(75%) contrast(90%);81 // filter: invert(16%) sepia(100%) saturate(3091%) hue-rotate(347deg) brightness(75%) contrast(90%); 84 82 } 85 83 … … 116 114 z-index: 3; 117 115 118 tr hr { 119 background-color: rgba(var(--bg-color-raw), 0.5); 116 tr { 117 td { 118 vertical-align: center; 119 } 120 121 hr { 122 background-color: rgba(var(--bg-color-raw), 0.5); 123 height: 2px; 124 } 120 125 } 121 126 } … … 137 142 <script> 138 143 import { mapState } from "vuex"; 144 import Jimp from "jimp/es"; 139 145 import ToggleButton from "./ToggleButton.vue" 140 146 … … 151 157 imageUrl: URL.createObjectURL(this.image), 152 158 invert: false, 153 rotateMode: false 159 rotation: 0, 160 rotateMode: false, 161 allowRotation: false 154 162 } 155 163 }, … … 167 175 }, 168 176 transformString() { 169 return `rotate(${this.rotation}deg)` 177 return `rotate(${this.rotation}deg)`; 178 }, 179 transformStringInverted() { 180 return `rotate(-${this.rotation}deg)`; 170 181 } 171 182 }) 172 183 }, 173 184 methods: { 185 async getImageBlobAsync() { 186 const buffer = Buffer.from(this.image.arrayBuffer()); 187 const that = this; 188 189 const modifiedBuffer = await Jimp.read(buffer) 190 .then(async image => { 191 if (that.invert) { 192 image.invert(); 193 } 194 195 // if (that.rotation !== 0) { 196 // image.rotate(that.rotation); 197 // } 198 199 return await image.getBufferAsync(Jimp.MIME_PNG); 200 }); 201 202 return new Blob([ modifiedBuffer ], { type: Jimp.MIME_PNG }); 203 }, 204 205 onRotateHandleMouseDown(point) { 206 console.log(point); 207 this.rotatePoint = point; 208 }, 209 /** 210 * @param {MouseEvent} e The mouse movement event. 211 */ 212 onDocumentMouseMove(e) { 213 if (!this.allowRotation) { 214 return; 215 } 216 217 const imageRectangle = this.$refs.image.getBoundingClientRect(); 218 const imageCenterX = (imageRectangle.width / 2) + imageRectangle.left; 219 const imageCenterY = (imageRectangle.height / 2) + imageRectangle.top; 220 221 if (e.clientX > imageCenterX) { 222 this.rotation += e.movementY / 8; 223 } 224 else { 225 this.rotation -= e.movementY / 8; 226 } 227 228 if (e.clientY > imageCenterY) { 229 this.rotation -= e.movementX / 8; 230 } 231 else { 232 this.rotation += e.movementX / 8; 233 } 234 235 if (this.rotation < 0) { 236 this.rotation = 360 + this.rotation; 237 } 238 else if (this.rotation > 360) { 239 this.rotation -= 360; 240 } 241 }, 242 onDocumentMouseUp() { 243 this.allowRotation = false; 244 } 245 }, 246 beforeMount() { 247 document.addEventListener("mousemove", this.onDocumentMouseMove); 248 document.addEventListener("mouseup", this.onDocumentMouseUp); 249 }, 250 beforeUnmount() { 251 document.removeEventListener("mousemove", this.onDocumentMouseMove); 252 document.removeEventListener("mouseup", this.onDocumentMouseUp); 174 253 } 175 254 }
Note:
See TracChangeset
for help on using the changeset viewer.