Pulling SVG and PNG download link code into separate file
This commit is contained in:
parent
42a1788c52
commit
89bac8953b
@ -6,53 +6,7 @@ import LinkIcon from 'react-feather/dist/icons/link';
|
|||||||
|
|
||||||
import style from './style.module.css';
|
import style from './style.module.css';
|
||||||
|
|
||||||
const createSvgLink = async ({ svg }) => {
|
import { createPngLink, createSvgLink } from './links';
|
||||||
try {
|
|
||||||
const type = 'image/svg+xml';
|
|
||||||
const blob = new Blob([svg], { type });
|
|
||||||
|
|
||||||
return {
|
|
||||||
url: URL.createObjectURL(blob),
|
|
||||||
label: 'Download SVG',
|
|
||||||
filename: 'image.svg',
|
|
||||||
type
|
|
||||||
};
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
console.error(e); // eslint-disable-line no-console
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const createPngLink = async ({ svg, width, height }) => {
|
|
||||||
try {
|
|
||||||
const type = 'image/png';
|
|
||||||
const canvas = document.createElement('canvas');
|
|
||||||
const context = canvas.getContext('2d');
|
|
||||||
const loader = new Image();
|
|
||||||
|
|
||||||
loader.width = canvas.width = width * 2;
|
|
||||||
loader.height = canvas.height = height * 2;
|
|
||||||
|
|
||||||
await new Promise(resolve => {
|
|
||||||
loader.onload = resolve;
|
|
||||||
loader.src = 'data:image/svg+xml,' + encodeURIComponent(svg);
|
|
||||||
});
|
|
||||||
|
|
||||||
context.drawImage(loader, 0, 0, loader.width, loader.height);
|
|
||||||
|
|
||||||
const blob = await new Promise(resolve => canvas.toBlob(resolve, type));
|
|
||||||
|
|
||||||
return {
|
|
||||||
url: URL.createObjectURL(blob),
|
|
||||||
label: 'Download PNG',
|
|
||||||
filename: 'image.png',
|
|
||||||
type
|
|
||||||
};
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
console.error(e); // eslint-disable-line no-console
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class FormActions extends React.PureComponent {
|
class FormActions extends React.PureComponent {
|
||||||
state = {}
|
state = {}
|
||||||
|
49
src/components/FormActions/links.js
Normal file
49
src/components/FormActions/links.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
const createSvgLink = async ({ svg }) => {
|
||||||
|
try {
|
||||||
|
const type = 'image/svg+xml';
|
||||||
|
const blob = new Blob([svg], { type });
|
||||||
|
|
||||||
|
return {
|
||||||
|
url: URL.createObjectURL(blob),
|
||||||
|
label: 'Download SVG',
|
||||||
|
filename: 'image.svg',
|
||||||
|
type
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.error(e); // eslint-disable-line no-console
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const createPngLink = async ({ svg, width, height }) => {
|
||||||
|
try {
|
||||||
|
const type = 'image/png';
|
||||||
|
const canvas = document.createElement('canvas');
|
||||||
|
const context = canvas.getContext('2d');
|
||||||
|
const loader = new Image();
|
||||||
|
|
||||||
|
loader.width = canvas.width = width * 2;
|
||||||
|
loader.height = canvas.height = height * 2;
|
||||||
|
|
||||||
|
await new Promise(resolve => {
|
||||||
|
loader.onload = resolve;
|
||||||
|
loader.src = 'data:image/svg+xml,' + encodeURIComponent(svg);
|
||||||
|
});
|
||||||
|
|
||||||
|
context.drawImage(loader, 0, 0, loader.width, loader.height);
|
||||||
|
|
||||||
|
const blob = await new Promise(resolve => canvas.toBlob(resolve, type));
|
||||||
|
|
||||||
|
return {
|
||||||
|
url: URL.createObjectURL(blob),
|
||||||
|
label: 'Download PNG',
|
||||||
|
filename: 'image.png',
|
||||||
|
type
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.error(e); // eslint-disable-line no-console
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export { createSvgLink, createPngLink };
|
Loading…
Reference in New Issue
Block a user