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

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

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

在花费大量时间之前,您需要用于创建机密图像的原始尺寸来检索它。因此,如果图像被裁剪,调整大小或更改了格式,您可能将无法检索到消息。

对于您的信息,这是Imagick示例的好网站:https://phpimagick.com/Imagick/queryFormats尽管他们没有提到steganoImage()

在网络上,我发现下面的代码(Codesearch)适用于IMagick:

#!/usr/bin/perl

use 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:');
,

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 offset
define('STEGANO_WIDTH',$watermark->getImageWidth());
define('STEGANO_HEIGHT',$watermark->getImageHeight());

$stegano = $image->steganoImage($watermark,STEGANO_OFFSET);
$stegano->writeImage('output.png');

output.png

要解码原始水印,请在读取文件之前定义隐藏图像的宽度,高度和偏移量。

$decoded = new Imagick();
$decoded->setSizeOffset(STEGANO_WIDTH,STEGANO_HEIGHT,STEGANO_OFFSET);
$decoded->readImage('STEGANO:output.png');
$decoded->writeImage('decoded.png');

decoded.png

本文链接:https://www.f2er.com/2953711.html

大家都在问