Backend/개발
[Spring Boot] SVG와 PNG , 준우승 은별 표시
지수쓰
2021. 8. 19. 16:31
반응형
TIL 41일차 개인프로젝트2
svg 파일
- Scalabe Vector Graphics 의 약자로, 2차원 벡터 그래픽을 표현하기 위한 XML 기반의 파일형식 ( w3c 주도하에 개발된 오픈 표준의 벡터 그ㅐ픽 파일 형식이다.)
- xml 텍스트파일들로 정의되어 검색화,목록화,스크립트화, 압축이 가능하다.
png파일
- Portable Network Graphics 비손실 그래픽 파일 포맷. bitmap으로 되어있다
PNG의 경우, 확대 축소시에 aliasing 현상이 생기는데 SVG의 경우 형태가 유지된다.
색 표현이 수학 계산이 필요하기 때문에 이미지가 복잡할수록 로딩 시간이 오래걸린다. css의 style="fill:color"
로 색을 제어할 수 있다.
출처 wiki
그래서 우승자 금별에 준우승자 은별을 달아주는기능을 추가하기로 했다.
여기서 걸리는 문제는,, 내가 우승자만 확인하는 용으로 디비 설계를 대충해버린것..? ㅠ_ㅠ
일단은 그냥 우승 : 양수 / 준우승 : 음수로 해서 절댓값으로 리그 구분하는 방식으로 구현해보았다.
그러면 등록은 바로 할 수 있고,
{{#hasLeagueResults member.leagueResults}}
<div style="margin-top: -15px;">
{{#each member.leagueResults as |result|}}
{{#isWinner result}}
<img src="/etc/star.svg" class="star" data-bs-toggle="tooltip" data-bs-placement="bottom" title='{{result}}회 대회 우승멤버🎉' />
{{else}}
<img src="/etc/star-silver.svg" class="star" data-bs-toggle="tooltip" data-bs-placement="bottom" title='{{getLeagueId result}}회 대회 준우승멤버' />
{{/isWinner}}
{{/each}}
<br/>
{{member.summonerName}}</div>
{{else}}
{{member.summonerName}}
{{/hasLeagueResults}}
hasLeagueResults(값 있는지)->isWinner(양수인지)->getLeagueId(절댓값 반환) 으로 가져올 수 있다.
여기서 문제가 생긴게 등록한 시점이 다르면 리그결과가 sorting이 안되는것,
@Test
public void 리그결과_정렬(){
//given
String summonerName = "롤xx";
MemberEntity memberEntity = memberRepository.findMemberEntityBySummonerName(summonerName);
List<Long> results = memberEntity.getLeagueResults();
Assertions.assertThat(results.get(0)).isEqualTo(2);
Collections.sort(results, (r1,r2)-> {
return Long.valueOf(Math.abs(r1)).compareTo(Math.abs(r2));
});
Assertions.assertThat(results.get(0)).isEqualTo(-1);
}
////
if(member.getLeagueResults().size()!=0){
memberDto.setLeagueResults(member.getLeagueResults().stream()
.sorted( (r1,r2) -> Long.valueOf(Math.abs(r1)).compareTo(Math.abs(r2)))
.collect(Collectors.toList())
);
}
sort , 그리고 Stream으로 sorting하는 함수로 1회가 2회보다 먼저 나타나게 했다.
나중에는 양수먼저,오름차순->음수오름차순 (금별다음 은별이 나타나도록) 하는 방식도 생각해봐야겠다.
1회 준우승을 했었어서 이제 내이름에도 별이 달렸다 ~ 호호