fix: download image size is incorrect

This commit is contained in:
jialin
2025-02-05 16:27:01 +08:00
parent 2c0ae66143
commit 8cbaa6b281
6 changed files with 91 additions and 26 deletions
+27
View File
@@ -1 +1,28 @@
// only for third party libraries styles // only for third party libraries styles
.simplebar-scrollbar.simplebar-visible::before {
opacity: 1;
}
.simplebar-scrollbar::before {
background: var(--scrollbar-handle-bg);
width: var(--scrollbar-size);
}
.simplebar-scrollbar.simplebar-visible.simplebar-hover {
&::before {
background: var(--scrollbar-handle-hover-bg);
}
}
.simplebar-scrollbar.scrollbar-handle-light {
&::before {
background-color: var(--scrollbar-handle-light-bg);
}
}
.simplebar-scrollbar.simplebar-visible.simplebar-hover.scrollbar-handle-light {
&::before {
background: var(--scrollbar-handle-light-bg);
}
}
+28 -3
View File
@@ -7,6 +7,7 @@ import {
} from '@ant-design/icons'; } from '@ant-design/icons';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { Button, Slider, Tooltip } from 'antd'; import { Button, Slider, Tooltip } from 'antd';
import dayjs from 'dayjs';
import _ from 'lodash'; import _ from 'lodash';
import React, { useCallback, useEffect, useRef, useState } from 'react'; import React, { useCallback, useEffect, useRef, useState } from 'react';
import IconFont from '../icon-font'; import IconFont from '../icon-font';
@@ -25,6 +26,8 @@ type CanvasImageEditorProps = {
imageStatus: { imageStatus: {
isOriginal: boolean; isOriginal: boolean;
isResetNeeded: boolean; isResetNeeded: boolean;
width: number;
height: number;
}; };
}; };
@@ -244,7 +247,7 @@ const CanvasImageEditor: React.FC<CanvasImageEditorProps> = ({
const mask = generateMask(); const mask = generateMask();
const link = document.createElement('a'); const link = document.createElement('a');
link.download = 'mask.png'; link.download = `mask_${dayjs().format('YYYYMMDDHHmmss')}.png`;
link.href = mask || ''; link.href = mask || '';
link.click(); link.click();
}, [generateMask]); }, [generateMask]);
@@ -494,15 +497,37 @@ const CanvasImageEditor: React.FC<CanvasImageEditorProps> = ({
redrawStrokes(newStrokes); redrawStrokes(newStrokes);
}; };
const download = () => { const downloadOriginImage = () => {
console.log('Downloading original image', imageStatus);
const canvas = canvasRef.current!; const canvas = canvasRef.current!;
const link = document.createElement('a'); const link = document.createElement('a');
link.download = 'image.png'; link.download = `image_${dayjs().format('YYYYMMDDHHmmss')}.png`;
link.href = canvas.toDataURL('image/png'); link.href = canvas.toDataURL('image/png');
link.click(); link.click();
link.remove(); link.remove();
}; };
const downloadNewImage = () => {
const url = imageSrc || '';
const filename = `${imageStatus.width}x${imageStatus.height}_${dayjs().format('YYYYMMDDHHmmss')}.png`;
const link = document.createElement('a');
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
link.remove();
};
const download = () => {
console.log('Downloading image:', imageStatus);
if (imageStatus.isOriginal) {
downloadOriginImage();
} else {
downloadNewImage();
}
};
const drawImage = useCallback(async () => { const drawImage = useCallback(async () => {
if (!containerRef.current || !canvasRef.current) return; if (!containerRef.current || !canvasRef.current) return;
return new Promise<void>((resolve) => { return new Promise<void>((resolve) => {
+1 -15
View File
@@ -1,6 +1,7 @@
@import url('src/assets/styles/common.less'); @import url('src/assets/styles/common.less');
@import url('src/assets/styles/menu.less'); @import url('src/assets/styles/menu.less');
@import url('src/assets/styles/driver.less'); @import url('src/assets/styles/driver.less');
@import url('./overrides.less');
html { html {
--font-family: 'noto sans', sans-serif; --font-family: 'noto sans', sans-serif;
@@ -604,21 +605,6 @@ body {
} }
} }
.simplebar-scrollbar.simplebar-visible::before {
opacity: 1;
}
.simplebar-scrollbar::before {
background: var(--scrollbar-handle-bg);
width: var(--scrollbar-size);
}
.simplebar-scrollbar.simplebar-visible.simplebar-hover {
&::before {
background: var(--scrollbar-handle-hover-bg);
}
}
.rc-virtual-list-scrollbar { .rc-virtual-list-scrollbar {
width: var(--scrollbar-size) !important; width: var(--scrollbar-size) !important;
} }
+4 -1
View File
@@ -7,7 +7,10 @@ const FileParts: React.FC<{
fileList: any[]; fileList: any[];
}> = ({ fileList }) => { }> = ({ fileList }) => {
return ( return (
<SimpleBar style={{ maxHeight: 200 }}> <SimpleBar
style={{ maxHeight: 200 }}
classNames={{ scrollbar: 'scrollbar-handle-light simplebar-scrollbar' }}
>
<div style={{ padding: 10 }}> <div style={{ padding: 10 }}>
{fileList.map((file, index) => { {fileList.map((file, index) => {
return ( return (
@@ -183,7 +183,11 @@ const InstanceItem: React.FC<InstanceItemProps> = ({
</Col> </Col>
<Col span={6}> <Col span={6}>
<span <span
style={{ paddingLeft: '58px' }} style={{
paddingLeft: '58px',
flexWrap: 'wrap',
gap: '5px'
}}
className="flex align-center" className="flex align-center"
> >
{item.computed_resource_claim?.total_layers !== {item.computed_resource_claim?.total_layers !==
@@ -221,6 +225,11 @@ const InstanceItem: React.FC<InstanceItemProps> = ({
<Tag <Tag
color="cyan" color="cyan"
style={{ style={{
maxWidth: '100%',
minWidth: 50,
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
overflow: 'hidden',
opacity: 0.75, opacity: 0.75,
borderRadius: 12 borderRadius: 12
}} }}
@@ -242,6 +251,11 @@ const InstanceItem: React.FC<InstanceItemProps> = ({
<Tag <Tag
color="processing" color="processing"
style={{ style={{
maxWidth: '100%',
minWidth: 50,
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
overflow: 'hidden',
opacity: 0.75, opacity: 0.75,
borderRadius: 12 borderRadius: 12
}} }}
+16 -6
View File
@@ -129,9 +129,13 @@ const GroundImages: React.FC<MessageProps> = forwardRef((props, ref) => {
const [imageStatus, setImageStatus] = useState<{ const [imageStatus, setImageStatus] = useState<{
isOriginal: boolean; isOriginal: boolean;
isResetNeeded: boolean; isResetNeeded: boolean;
width: number;
height: number;
}>({ }>({
isOriginal: false, isOriginal: false,
isResetNeeded: false isResetNeeded: false,
width: 512,
height: 512
}); });
const doneImage = useRef<boolean>(false); const doneImage = useRef<boolean>(false);
const cacheFormData = useRef<any>({}); const cacheFormData = useRef<any>({});
@@ -661,16 +665,20 @@ const GroundImages: React.FC<MessageProps> = forwardRef((props, ref) => {
setActiveImgUid(_.get(base64List, '[0].uid', '')); setActiveImgUid(_.get(base64List, '[0].uid', ''));
setImageStatus({ setImageStatus({
isOriginal: false, isOriginal: false,
isResetNeeded: true isResetNeeded: true,
width: _.get(currentImg, 'width', 512),
height: _.get(currentImg, 'height', 512)
}); });
setImageList([]); setImageList([]);
}, []); }, []);
const handleOnSave = useCallback( const handleOnSave = useCallback(
(data: { img: string; mask: string | null }) => { (data: { img: string; mask: string | null }) => {
setImageStatus({ setImageStatus((pre) => {
isOriginal: true, return {
isResetNeeded: false ...pre,
isResetNeeded: false
};
}); });
setMask(data.mask || null); setMask(data.mask || null);
setImage(data.img); setImage(data.img);
@@ -731,7 +739,9 @@ const GroundImages: React.FC<MessageProps> = forwardRef((props, ref) => {
setImage(item.dataUrl); setImage(item.dataUrl);
setImageStatus({ setImageStatus({
isOriginal: isOrigin, isOriginal: isOrigin,
isResetNeeded: false isResetNeeded: false,
width: item.width,
height: item.height
}); });
}, []); }, []);