아스키 아트

Ascii

이미지의 밝고 어두운 부분을 문자 밀도로 바꿔 ASCII 문자 그림으로 보여줍니다.

다른 이름: AsciiASCII arttext art

WebGPU 를 지원하는 브라우저에서 움직입니다

이 기기에서는 데모를 그리지 못해 정지 화면을 보여 줍니다

React
// WebGPU 를 지원하는 브라우저에서만 그립니다.
// /samples/… 는 이 사이트의 샘플 파일입니다. 내 프로젝트의 이미지·영상 경로로 바꾸세요.
import { Shader, Ascii, ImageTexture } from 'shaders/react'

export default function ShaderEffect() {
  return (
    <Shader style={{ width: '100%', height: 320 }} disableTelemetry>
      <ImageTexture
        objectFit="cover"
        url="/samples/still.jpg" />
      <Ascii
        cellSize={16}
        fontFamily="monospace" />
    </Shader>
  )
}
Vue
<!-- WebGPU 를 지원하는 브라우저에서만 그립니다. -->
<!-- /samples/… 는 이 사이트의 샘플 파일입니다. 내 프로젝트의 이미지·영상 경로로 바꾸세요. -->
<script setup lang="ts">
import { Shader, Ascii, ImageTexture } from 'shaders/vue'
</script>

<template>
  <Shader style="width: 100%; height: 320px" :disable-telemetry="true">
    <ImageTexture
      object-fit="cover"
      url="/samples/still.jpg"/>
    <Ascii
      :cell-size="16"
      font-family="monospace"/>
  </Shader>
</template>
Svelte
<!-- WebGPU 를 지원하는 브라우저에서만 그립니다. -->
<!-- /samples/… 는 이 사이트의 샘플 파일입니다. 내 프로젝트의 이미지·영상 경로로 바꾸세요. -->
<script>
  import { Shader, Ascii, ImageTexture } from 'shaders/svelte'
</script>

<Shader style="width: 100%; height: 320px" disableTelemetry>
  <ImageTexture
    objectFit="cover"
    url="/samples/still.jpg" />
  <Ascii
    cellSize={16}
    fontFamily="monospace" />
</Shader>
Solid
// WebGPU 를 지원하는 브라우저에서만 그립니다.
// /samples/… 는 이 사이트의 샘플 파일입니다. 내 프로젝트의 이미지·영상 경로로 바꾸세요.
import { Shader, Ascii, ImageTexture } from 'shaders/solid'

export default function ShaderEffect() {
  return (
    <Shader style={{ width: '100%', height: '320px' }} disableTelemetry>
      <ImageTexture
        objectFit="cover"
        url="/samples/still.jpg" />
      <Ascii
        cellSize={16}
        fontFamily="monospace" />
    </Shader>
  )
}
JavaScript
// WebGPU 를 지원하는 브라우저에서만 그립니다.
// /samples/… 는 이 사이트의 샘플 파일입니다. 내 프로젝트의 이미지·영상 경로로 바꾸세요.
// <canvas id="canvas" style="width:100%;height:320px"></canvas> 가 페이지에 있어야 한다
import { createShader } from 'shaders/js'

const shader = await createShader(document.getElementById("canvas"), {
  components: [
    {
      type: 'ImageTexture',
      props: {
        objectFit: 'cover',
        url: '/samples/still.jpg',
      },
    },
    {
      type: 'Ascii',
      props: {
        cellSize: 16,
        fontFamily: 'monospace',
      },
    }
  ]
}, { disableTelemetry: true })

속성(props) · Ascii

값을 바꾸면 위 데모와 코드 탭에 바로 반영됩니다. 설명은 라이브러리 레지스트리의 영어 원문(MIT)입니다.

이름값기본값범위·선택지설명(원문)
charactersCharacters@%#*+=-:.—Characters ordered from dense to sparse. First character is used for bright areas, last for dark areas.
cellSizeCell Size308 – 100 (step 1)Size of each ASCII character cell (normalized to 1080p reference, scales proportionally at other resolutions)
fontFamilyFont Family코드에서 지정JetBrains MonoAzeret Mono · Courier Prime · Cutive Mono · Fira Code · Geist Mono · IBM Plex Mono · JetBrains Mono · Major Mono Display · Martian Mono · Nova Mono · Press Start 2P · Roboto Mono · Share Tech Mono · Silkscreen · Source Code Pro · Space Mono · Syne Mono · VT323 · Xanh MonoFont family for characters
spacingCharacter Size10 – 1 (step 0.01)Character size within each cell (1.0 = optimal size, 0.0 = smallest)
gammaGamma10.25 – 3 (step 0.01)Brightness curve adjustment. <1 brightens darks (more light characters), >1 darkens midtones (more dark characters). Use to better fit characters to image brightness range.
alphaThresholdAlpha Threshold00 – 1 (step 0.01)Pixels with alpha below this threshold become fully transparent.
preserveAlphaPreserve Alphatrue—When enabled, output alpha matches input alpha. When disabled, pixels above the alpha threshold become fully opaque.

모든 컴포넌트 공통: blendMode · opacity · visible · maskSource/maskType · boundingBox · id

사진을 작은 활자 모자이크로 바꾸는 효과입니다. 축소된 신문 사진이나 터미널 초상처럼, 밝고 어두운 덩어리가 문자 배열로 드러납니다.

`cellSize`는 기본 30이며 8–100에서 조절해 글자 칸을 키우거나 줄입니다. `spacing`은 기본 1이며 0–1에서 글자 크기를 정하고, `gamma`는 기본 1이며 0.25–3에서 밝기 분포를 조정합니다. `characters`의 기본 팔레트는 `@%#*+=-:.`, `fontFamily`의 기본값은 `JetBrains Mono`입니다.

먼저 이미지·영상 같은 입력 레이어를 두고 그 위에 적용해야 문자가 보입니다. `Dither`나 `Pixelate`와 함께 쓰면 제한된 화면 질감을 강조할 수 있지만, 셀을 크게 하면 사진의 표정과 작은 글자는 알아보기 어렵습니다.

언제 쓰나

포스터 초상, 타이틀 카드, 레트로 터미널 그래픽에 좋습니다. 사진의 세부나 작은 UI 글자를 또렷하게 읽어야 하는 화면에는 피하세요.

페이지로 열기 ↗