2 回答
TA贡献1784条经验 获得超7个赞
在您花费大量时间之前,您需要用于创建秘密图像的原始维度来检索它。因此,如果图像被裁剪、调整大小或格式更改,您可能无法检索到消息。
供您参考,这是 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:');
TA贡献1845条经验 获得超8个赞
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');
要解码原始水印,请在读取文件之前定义隐藏图像的宽度、高度和偏移量。
$decoded = new Imagick();
$decoded->setSizeOffset(STEGANO_WIDTH, STEGANO_HEIGHT, STEGANO_OFFSET);
$decoded->readImage('STEGANO:output.png');
$decoded->writeImage('decoded.png');
- 2 回答
- 0 关注
- 116 浏览
添加回答
举报