【问题标题】:how to restore the watermark set with Imagick::steganoImage()如何使用 Imagick::steganoImage() 恢复水印集
【发布时间】:2020-04-01 19:13:51
【问题描述】:

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

【问题讨论】:

  • 使用原图即可。
  • @ChrisCatignani 我听不懂,你能详细说明一下吗?
  • ..你有一个原始图像。您将其读入另一张图像并加水印。(不是原始图像)。无需撤消。
  • @ChrisCatignani 但是如果我不想保留原始图像而只想保留带水印的版本以便以后恢复它怎么办。

标签: php image-processing imagemagick imagick


【解决方案1】:

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

供您参考,这是 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:');

【讨论】:

  • 这是一个更好的进步,但并没有解决我的问题。我尝试了一个代码,但不起作用。
【解决方案2】:

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');

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2021-11-26
    • 2016-11-15
    • 1970-01-01
    • 2018-12-26
    • 2022-09-26
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多