아래와 같이 동그란 배경에 이미지를 올리는 작업을 하고, 스크린샷을 찍는 기능을 구현을 했습니다.
스크린샷은 html2canvas를 사용해서 찍었고, 코드는 아래와같이 구현을 하였는데,
스크린샷 이미지에서는 묘하게 이미지 비율이 바뀌는 문제가 있었습니다.
<div style={styles.circle}>
<img src={item.profileImage} alt={item.profileImage} style={styles.circleImg} />
</div>
circle: {
width: '85px',
height: '85px',
borderRadius: '50%',
overflow: 'hidden',
},
circleImg: {
width: '100%',
height: '100%',
backgroundColor: '#3a3a3a',
objectFit: 'cover',
},
결과만 말하자면, "objectFit : cover" 속성이 html2canvas에서 제대로 동작하지 않는다는 것이 문제였습니다.
비교적 최근에 나온 속성이라, 이부분을 수정하여 다른방식으로 변경해보았고 수정되었음을 확인하였습니다.
objectFit : cover 는 이미지를 부모요소에 완전히 맞추면서 원본 이미지의 비율을 유지하는 것 입니다.
따라서 이미지의 가로-세로 비율이 부모요소의 가로-세로 비율과 다른 경우, 콘텐츠의 일부가 잘릴 수 있습니다.
circle: {
width: '85px',
height: '85px',
borderRadius: '50%',
overflow: 'hidden',
display: 'flex',
alignItems: 'center'
},
circleImg: {
width: '100%',
//height: '100%',
backgroundColor: '#3a3a3a',
//objectFit: 'cover',
backgroundSize: 'cover',
},
objectFit : cover 대신 backgroundSize: 'cover'를 추가해줍니다.
여기까지만 하면 html2canvas의 결과로 나온 이미지와 동일하게 약간 찌그러져 표시되는것을 확인 할 수 있습니다.
이 상태에서 width, height 속성중 하나를 제거해주면 제대로된 비율로 수정됩니다.
이때 세로가 긴 이미지의 경우, 중앙이 아닌 상단이 표시될 수 있는데
display : flex와 alignItems: center를 추가하여 수정가능합니다.
'개발 > javascript' 카테고리의 다른 글
[Next.js] next-i18next로 웹페이지 다국어 지원 구현하기 & 에러 수정 (0) | 2023.06.20 |
---|---|
[React] Firebase Auth기능을 이용한 로그인 구현 - Google/Github/Email (0) | 2023.03.02 |