whole_func_string: async function getImageDataFromSource(source) {
    const isStringSource = typeof source === 'string'
    const isURLSource = isStringSource ? isUrl(source) : false
    const { tagName } = source
  
    return new Promise((resolve, reject) => {
      // String source
      if (isStringSource) {
        // Read file in Node.js
        if (isNode) {
          Jimp.read(
            isURLSource ? { url: source, headers: {} } : source,
            (err, image) => {
              if (err) {
                reject(err)
              } else {
                const { data, width, height } = image.bitmap
                resolve({
                  data: data.toJSON().data,
                  width,
                  height,
                })
              }
            }
          )
        } else if (isURLSource) {
          // Load Image from source
          const img = new Image()
          img.onerror = reject
          img.onload = () => resolve(createImageData(img))
          img.src = source
        } else {
          // Find Elment by ID
          const imgElem = document.getElementById(source)
          if (imgElem) {
            resolve(createImageData(imgElem))
          }
  
          reject(new Error('Invalid image source specified!'))
        }
      } else if (tagName) {
        // HTML Image element
        if (tagName === 'IMG') {
          resolve(createImageData(source))
        }
        // HTML Canvas element
        else if (tagName === 'CANVAS') {
          resolve(
            source
              .getContext('2d')
              .getImageData(0, 0, source.naturalWidth, source.naturalHeight)
          )
        }
  
        reject(new Error('Invalid image source specified!'))
      }
      // Pixel Data
      else if (source.data && source.width && source.height) {
        resolve(source)
      } else {
        reject(new Error('Invalid image source specified!'))
      }
    })
  }
func_code_string: async function getImageDataFromSource(source) {
    const isStringSource = typeof source === 'string'
    const isURLSource = isStringSource ? isUrl(source) : false
    const { tagName } = source
  
    return new Promise((resolve, reject) => {
      // String source
      if (isStringSource) {
        // Read file in Node.js
        if (isNode) {
          Jimp.read(
            isURLSource ? { url: source, headers: {} } : source,
            (err, image) => {
              if (err) {
                reject(err)
              } else {
                const { data, width, height } = image.bitmap
                resolve({
                  data: data.toJSON().data,
                  width,
                  height,
                })
              }
            }
          )
        } else if (isURLSource) {
          // Load Image from source
          const img = new Image()
          img.onerror = reject
          img.onload = () => resolve(createImageData(img))
          img.src = source
        } else {
          // Find Elment by ID
          const imgElem = document.getElementById(source)
          if (imgElem) {
            resolve(createImageData(imgElem))
          }
  
          reject(new Error('Invalid image source specified!'))
        }
      } else if (tagName) {
        // HTML Image element
        if (tagName === 'IMG') {
          resolve(createImageData(source))
        }
        // HTML Canvas element
        else if (tagName === 'CANVAS') {
          resolve(
            source
              .getContext('2d')
              .getImageData(0, 0, source.naturalWidth, source.naturalHeight)
          )
        }
  
        reject(new Error('Invalid image source specified!'))
      }
      // Pixel Data
      else if (source.data && source.width && source.height) {
        resolve(source)
      } else {
        reject(new Error('Invalid image source specified!'))
      }
    })
  }
func_documentation_string: Reads image source and returns imageData as only callback parameter
  @param {*} source Image source
  @param {Function} callback Callback to pass the imageData