실시간 포토샵 만들기 🎨
16104 단어 cssjavascript
음, 전부는 아니지만 가변 CSS 필터를 사용하여 Photoshop에서 이미지 필터를 다시 만들 것입니다.
나는 사람들이 각 필터의 효과가 무엇인지 이해할 수 있도록 놀이터를 만들기로 선택했습니다! 도움이 되셨기를 바랍니다.
이 기사에서 다룰 내용은 다음과 같습니다.
실제로 사용해 보면 어떻게 작동하는지 알 수 있으므로 이 Codepen을 가지고 놀아 보십시오.
HTML 구조
우리의 응용 프로그램은 왼쪽에 하나의 이미지가 있고 오른쪽에 슬라이더 컨트롤이 있을 것이므로 먼저 HTML로 만들어 보겠습니다.
<div class="container">
<img
src="https://images.unsplash.com/photo-1508671323699-6df22ecaec2a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=250&q=80"
id="main-image"
/>
<div class="toolbox">
<label>
Blur
<input id="blur" max="20" min="0" step="1" type="range" value="0" />
</label>
<label>
Brightness
<input id="brightness" max="1" min="0" step="0.1" type="range" value="1" />
</label>
<label>
Contrast
<input id="contrast" max="200" min="0" step="1" type="range" value="100" />
</label>
<label>
Grayscale
<input id="grayscale" max="100" min="0" step="1" type="range" value="0" />
</label>
<label>
Hue
<input id="hue" max="360" min="0" step="1" type="range" value="0" />
</label>
<label>
Invert
<input id="invert" max="100" min="0" step="1" type="range" value="0" />
</label>
<label>
Opacity
<input id="opacity" max="100" min="0" step="1" type="range" value="100" />
</label>
<label>
Saturate
<input id="saturate" max="200" min="0" step="1" type="range" value="100" />
</label>
<label>
Sepia
<input id="sepia" max="100" min="0" step="1" type="range" value="0" />
</label>
</div>
</div>
보시다시피
HTML
range
유형 슬라이더를 사용하고 각 필터의 일반 값인 기본값을 제공합니다.일반 스타일 추가
일반적인 스타일을 추가하여 시작하겠습니다.
.container {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
background: #eee;
}
.toolbox {
margin-left: 50px;
display: flex;
justify-content: center;
flex-direction: column;
}
label {
margin-bottom: 5px;
}
멋진 것은 없지만 모든 것을 사용하고 Flex to center 요소에 기본 여백을 추가합니다.
CSS 변수 추가
오늘의 주제에서 우리는
CSS
Variables을 다루고 있습니다. 이들은 JavaScript
로 쉽게 변경할 수 있기 때문에 매우 유용합니다!:root {
--blur: 0;
--brightness: 1;
--contrast: 100;
--grayscale: 0;
--hue: 0;
--invert: 0;
--opacity: 100;
--saturate: 100;
--sepia: 0;
}
위에서 우리가 사용하고 있는 모든 변수를 볼 수 있습니다. 우리가 생성한
HTML
입력과 일치합니다!그래서 우리는 모두 기본 시작점 값을 갖도록 설정했지만 어떻게 작동합니까?
CSS 필터
CSS
Disco Text에 대한 기사에서 보았듯이 CSS 필터는 정말 멋집니다.사용할 수 있는 필터는 다음과 같습니다.
이제 이 문제를 해결하고 이미지에 필터를 추가해 보겠습니다.
#main-image {
transition: all 300ms ease-in-out;
filter: blur(calc(1px * var(--blur))) brightness(var(--brightness)) contrast(
calc(1% * var(--contrast))
) grayscale(calc(1% * var(--grayscale))) hue-rotate(calc(1deg * var(--hue))) invert(
calc(1% * var(--invert))
)
opacity(calc(1% * var(--opacity))) saturate(calc(1% * var(--saturate))) sepia(calc(1% *
var(--sepia)));
border: 5px solid #fff;
}
우와! 대규모 코드 블록이지만 기본적으로 하나의 필터 요소만 가질 수 있으므로 필터를 서로 "연결"합니다!
좋습니다. 이제 이미지에 모든 필터를 설정했지만 아무 것도 변경되지 않았나요?
옳은! 이들은 모두 각 필터의 기본값이므로 일부
JavaScript
를 추가하여 슬라이더가 변수에 영향을 미치도록 합시다.자바스크립트 CSS 변수 설정
먼저 이미지 개체를 시작하고 가져옵니다.
var img = document.getElementById('main-image');
자, 이제 모든 슬라이더를 찾아야 합니다.
var inputs = document.querySelectorAll('input');
다음으로 각 입력을 반복하고 이벤트 리스너를 연결합니다.
[].forEach.call(inputs, function(input) {
input.addEventListener('input', e => {
img.style.setProperty('--' + input.id, input.value);
});
});
입력 이벤트에 이벤트 리스너를 추가하므로 슬라이더가 변경될 때마다 함수를 실행합니다.
그런 다음 함수는 이미지 변수를 가져오고
setProperty
함수를 사용하여 변수(예: --blur
)를 입력 값으로 설정합니다!브라우저 지원
앞에서 언급했듯이 CSS 필터는 멋지지만 아직 널리 지원되지는 않습니다 😩.
polyfill 이 있지만 제한적이기도 합니다.
읽어주셔서 감사합니다. 연결해 봅시다!
제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나
Reference
이 문제에 관하여(실시간 포토샵 만들기 🎨), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dailydevtips1/building-a-realtime-photoshop-20i0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)