feat(ImageShow.svelte-utils.js): save image to disk
BREAKING CHANGE:
This commit is contained in:
parent
89b2a2bdd5
commit
84ac0a5d55
|
|
@ -18,6 +18,7 @@
|
||||||
"bulma": "^0.9.4",
|
"bulma": "^0.9.4",
|
||||||
"fabric": "^5.2.4",
|
"fabric": "^5.2.4",
|
||||||
"jimp": "^0.16.2",
|
"jimp": "^0.16.2",
|
||||||
|
"moment": "^2.29.4",
|
||||||
"sass": "^1.56.1",
|
"sass": "^1.56.1",
|
||||||
"uuid": "^9.0.0"
|
"uuid": "^9.0.0"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,18 @@
|
||||||
<script>
|
<script>
|
||||||
|
import moment from "moment";
|
||||||
import { onMount, onDestroy } from "svelte";
|
import { onMount, onDestroy } from "svelte";
|
||||||
|
|
||||||
import Navbar from "./Navbar.svelte";
|
import Navbar from "./Navbar.svelte";
|
||||||
import Mask from "./Mask.svelte";
|
import Mask from "./Mask.svelte";
|
||||||
import { ImageProcess } from "./utils";
|
import { ImageProcess, download_image } from "./utils";
|
||||||
|
|
||||||
const cv = window.cv;
|
const cv = window.cv;
|
||||||
let image_process = new ImageProcess();
|
let image_process = new ImageProcess();
|
||||||
|
|
||||||
export let url = "test.jpg";
|
export let url = "test.jpg";
|
||||||
|
|
||||||
|
moment.locale("zh-cn");
|
||||||
|
|
||||||
let canvas_dom;
|
let canvas_dom;
|
||||||
let resize_tag;
|
let resize_tag;
|
||||||
let image;
|
let image;
|
||||||
|
|
@ -47,7 +50,6 @@
|
||||||
"mdi mdi-file-rotate-left-outline",
|
"mdi mdi-file-rotate-left-outline",
|
||||||
() => {
|
() => {
|
||||||
image_process.turn_left();
|
image_process.turn_left();
|
||||||
cv.rotate(image_for_show, image_for_show, 0);
|
|
||||||
show_image();
|
show_image();
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
@ -56,7 +58,6 @@
|
||||||
"mdi mdi-file-rotate-right-outline",
|
"mdi mdi-file-rotate-right-outline",
|
||||||
() => {
|
() => {
|
||||||
image_process.turn_right();
|
image_process.turn_right();
|
||||||
cv.rotate(image_for_show, image_for_show, 2);
|
|
||||||
show_image();
|
show_image();
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
@ -83,12 +84,21 @@
|
||||||
"mdi mdi-alpha-x-circle-outline",
|
"mdi mdi-alpha-x-circle-outline",
|
||||||
() => {
|
() => {
|
||||||
image_process.recover();
|
image_process.recover();
|
||||||
init_canvas();
|
init_canvas(show_image);
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
]),
|
]),
|
||||||
new LabelItem("文件操作", [
|
new LabelItem("文件操作", [
|
||||||
["保存到本地", "mdi mdi-content-save-outline", () => {}],
|
[
|
||||||
|
"保存到本地",
|
||||||
|
"mdi mdi-content-save-outline",
|
||||||
|
() => {
|
||||||
|
get_image_buffer().then((b_img) => {
|
||||||
|
let now = moment();
|
||||||
|
download_image(b_img, now.format("YYYY-MM-DD") + ".jpg");
|
||||||
|
});
|
||||||
|
},
|
||||||
|
],
|
||||||
["打印图片", "mdi mdi-printer-outline"],
|
["打印图片", "mdi mdi-printer-outline"],
|
||||||
]),
|
]),
|
||||||
];
|
];
|
||||||
|
|
@ -98,6 +108,20 @@
|
||||||
canvas_width = window_width * 0.8125;
|
canvas_width = window_width * 0.8125;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function get_image_buffer() {
|
||||||
|
const jimp = window.jimp;
|
||||||
|
let dst = format_image(image);
|
||||||
|
cv.cvtColor(image, image, cv.COLOR_RGB2RGBA, 0);
|
||||||
|
let k = new jimp({
|
||||||
|
width: dst.cols,
|
||||||
|
height: dst.rows,
|
||||||
|
data: dst.data,
|
||||||
|
});
|
||||||
|
let base64_image = await k.getBase64Async(jimp.MIME_JPEG);
|
||||||
|
dst.delete();
|
||||||
|
return base64_image;
|
||||||
|
}
|
||||||
|
|
||||||
function on_mask_close(e) {
|
function on_mask_close(e) {
|
||||||
mask_tag = false;
|
mask_tag = false;
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|
@ -166,6 +190,9 @@
|
||||||
kc.delete();
|
kc.delete();
|
||||||
cop.delete();
|
cop.delete();
|
||||||
}
|
}
|
||||||
|
if (image_process.rotate_tag >= 0) {
|
||||||
|
cv.rotate(dst, dst, image_process.rotate_tag);
|
||||||
|
}
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -210,3 +210,28 @@ export function ImageProcess() {
|
||||||
this.crop_rect = rect;
|
this.crop_rect = rect;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function base64_to_blob(base64_data) {
|
||||||
|
let arr = base64_data.split(","),
|
||||||
|
mime = arr[0].match(/:(.*?);/)[1],
|
||||||
|
bstr = Buffer.from(arr[1], "base64")
|
||||||
|
return new Blob([bstr], { type: mime });
|
||||||
|
}
|
||||||
|
|
||||||
|
function download_file(url, name) {
|
||||||
|
var a = document.createElement("a");
|
||||||
|
a.setAttribute("href", url);
|
||||||
|
a.setAttribute("download", name);
|
||||||
|
a.setAttribute("target", "_blank");
|
||||||
|
a.addEventListener("click", ()=>{
|
||||||
|
console.log("download")
|
||||||
|
}, false);
|
||||||
|
a.click();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function download_image(base64, name) {
|
||||||
|
var blob = base64_to_blob(base64);
|
||||||
|
var url = URL.createObjectURL(blob);
|
||||||
|
download_file(url, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue