adriancooney / console.image

The one thing Chrome Dev Tools didn't need.
1.77k stars 131 forks source link

A version that works in modern browsers (and typescript version) #25

Open elliots opened 1 year ago

elliots commented 1 year ago

javascript:


/**
 * Display an image in the console.
 */
console.image = function (url, backgroundColour, scale) {
  const img = new Image()
  img.crossOrigin = "anonymous"
  img.onload = () => {
    const c = document.createElement('canvas')
    const ctx = c.getContext('2d')
    if (ctx) {
      c.width = img.width
      c.height = img.height
      ctx.fillStyle = backgroundColour;
      ctx.fillRect(0, 0, c.width, c.height);
      ctx.drawImage(img, 0, 0)
      const dataUri = c.toDataURL('image/png')

      console.log(`%c sup?` ,
        `
          font-size: 1px;
          padding: ${Math.floor((img.height * scale) / 2)}px ${Math.floor((img.width * scale) / 2)}px;
          background-image: url(${dataUri});
          background-repeat: no-repeat;
          background-size: ${img.width * scale}px ${img.height * scale}px;
          color: transparent;
        `
      )
    }
  }
  img.src = url
}

Typescript:

declare global {
  interface Console {
    image: (url: string, backgroundColour?: string, scale?: number) => void
  }
}

/**
 * Display an image in the console.
 */
console.image = function (url: string, backgroundColour: string = 'white', scale: number = 1) {
  const img = new Image()
  img.crossOrigin = "anonymous"
  img.onload = (): void => {
    const c = document.createElement('canvas')
    const ctx = c.getContext('2d')
    if (ctx) {
      c.width = img.width
      c.height = img.height
      ctx.fillStyle = backgroundColour;
      ctx.fillRect(0, 0, c.width, c.height);
      ctx.drawImage(img, 0, 0)
      const dataUri = c.toDataURL('image/png')
      console.log(`%c sup?` ,
        `
          font-size: 1px;
          padding: ${Math.floor((img.height * scale) / 2)}px ${Math.floor((img.width * scale) / 2)}px;
          background-image: url(${dataUri});
          background-repeat: no-repeat;
          background-size: ${img.width * scale}px ${img.height * scale}px;
          color: transparent;
        `
      )
    }
  }
  img.src = url
}
arcanisgk commented 2 months ago

I tried to use your script to improve my own script, when I try to add icons (png image) to the console.log output I get the image repeated on every line if the content has line breaks, lol.