如何使用 Imagick::steganoImage() 恢复水印集

所以我使用了这个用 PHP 编写的 Imagemagick 库包装器,并了解了这个名为 steganoImage() 的函数,它只是说它会在图像中隐藏一个水印。但问题是文档没有说明如何恢复该图像。我也检查了所有其他功能,没有找到任何东西。我想为此提供一个 Imagick 解决方案。



30秒到达战场
浏览 117回答 2
2回答

噜噜哒

在您花费大量时间之前,您需要用于创建秘密图像的原始维度来检索它。因此,如果图像被裁剪、调整大小或格式更改,您可能无法检索到消息。供您参考,这是 Imagick 示例的好站点:https ://phpimagick.com/Imagick/queryFormats虽然他们没有提到 steganoImage()在网上我发现下面的代码(Codesearch)适用于 IMagick:#!/usr/bin/perluse Image::Magick;## Hide an image within an image#$watermark=Image::Magick->new;$watermark->ReadImage('smile.gif');($width, $height)=$watermark->Get('width','height');## Hide image in image.#$image=Image::Magick->new;$image->ReadImage('model.gif');$image->SteganoImage(image=>$watermark,offset=>91);$image->Write('model.png');$image->Write('win:');## Extract image from image.#$size="$width" . "x" . "$height" . "+91";$stegano=Image::Magick->new(size=>$size);$stegano->ReadImage('stegano:model.png');$stegano->Write('stegano.gif');$stegano->Write('win:');

精慕HU

Bonzo提供的答案是正确的。PHP 的 Imagick 中的示例看起来非常相似。$image = new Imagick('rose:');$watermark = new Imagick('label:Hello World!');// The decoding process must "know" about the watermarks size, and starting// pixel offset.define('STEGANO_OFFSET', 64); // Secret offsetdefine('STEGANO_WIDTH', $watermark->getImageWidth());define('STEGANO_HEIGHT', $watermark->getImageHeight());$stegano = $image->steganoImage($watermark, STEGANO_OFFSET);$stegano->writeImage('output.png');要解码原始水印,请在读取文件之前定义隐藏图像的宽度、高度和偏移量。$decoded = new Imagick();$decoded->setSizeOffset(STEGANO_WIDTH, STEGANO_HEIGHT, STEGANO_OFFSET);$decoded->readImage('STEGANO:output.png');$decoded->writeImage('decoded.png');
打开App,查看更多内容
随时随地看视频慕课网APP