javascript 使用“锐化”不透明度设置叠加

hc8w905p  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(103)

我想把一张照片合成到另一张照片上。
这对于这个目的很有效:

overlayImg = await Sharp(sourceImage.Body)
            .composite([{ 
                input: './lambdas/processNewImage/logos/white.png', 
                gravity: 'southeast',
                
            }])
            .toFormat('jpeg').toBuffer();

我也有一个变量-1-100,这应该是水印的不透明度。有时候我想让它完全实心,不透明度为100%,其他人为70%,其他人为30%......等等。因为我需要它是可变的,我不能只改变水印图像的不透明度。
我不知道如何改变不透明度的合成图像在夏普。
谁能给予个简单的例子?

t1rydlwq

t1rydlwq1#

在另一个线程中发现了这个,在这个线程中,你覆盖了一个包含平铺的半透明像素值的原始像素缓冲区。128表示50%不透明度,有效值为0-255。https://github.com/lovell/sharp/issues/554

overlayImg = await Sharp(sourceImage.Body)
  .composite([
    { 
      input: './lambdas/processNewImage/logos/white.png', 
      gravity: 'southeast',  
    },
    {
      input: Buffer.from([0,0,0,128]),
      raw: {
        width: 1,
        height: 1,
        channels: 4,
      },
      tile: true,
      blend: 'dest-in',
    }
  ])
  .toFormat('jpeg').toBuffer();
vc6uscn9

vc6uscn92#

锐化可以更改图像的Alpha通道(不透明度)。https://sharp.pixelplumbing.com/api-channel#ensurealpha

sharp(current_path + 'logo.png')
  .ensureAlpha(0.5) // 50% opacity 
  .toBuffer()
  .then(transparent_logo=>{

      sharp(current_path + 'photo.png')
             .composite([{input: transparent_logo }])
             .toFile(current_path + 'output.png');
  })

相关问题