dom-to-image, file-saver 라이브러리를 이용해서 구현하는 방법으로 개발했다
라이브러리 설치
npm install dom-to-image
npm install file-saver
기능 구현
import React, { useEffect, useRef, useState } from 'react';
import domtoimage from 'dom-to-image';
import { saveAs } from 'file-saver';
function Image({ data }) {
const imgResult = useRef();
const handleDownload = () => {
const image = imgResult.current;
const filter = (image) => {
return image.tagName !== 'BUTTON';
};
domtoimage.toBlob(image, { filter: filter }).then((blob) => {
saveAs(blob, 'card.png');
});
};
return (
<>
<ImageWrap ref={imgResult}>
<ImageSelected src={images[imageIndex]} alt="background" />
<Message>{message}</Message>
<Bible>{bible}</Bible>
</ImageWrap>
<WriteMessage>
<div>메시지를 입력하세요.</div>
<input
type="text"
id="message"
maxLength="200"
onChange={handleMessge}
/>
</WriteMessage>
<SubmitButton onClick={handleDownload}>이미지 저장하기</SubmitButton>;
</>
);
}
export default Image;
const ImageWrap = styled.div`
border: 1px solid red;
`;
const ImageSelected = styled.img`
width: 50%;
height: 50%;
overflow: hidden;
`;
const Message = styled.div``;
const Bible = styled.div``;
const WriteMessage = styled.div`
border: 1px solid red;
`;
const SubmitButton = styled.button`
border: 1px solid red;
`;