首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imagick::steganoImage()无法显示水印

Imagick::steganoImage()无法显示水印
EN

Stack Overflow用户
提问于 2020-06-06 14:10:34
回答 1查看 94关注 0票数 1

我试着用Imagick::steganoImage来使用来自wikimedia commons的一个示例图像。如果我试图显示水印的解码图像,我总是得到1像素的图像,你可以看到下面,无论我选择的图像作为源。有人可能会帮助我理解为什么,以及我如何解决这个问题?

代码语言:javascript
复制
<?
header("Content-Type: image/png");   
// Create a new imagick object 
$image = new Imagick('https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/Frostedbubble2.jpg/640px-Frostedbubble2.jpg'); 
$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');

// Show the output 
$decoded->setImageFormat('png'); 
echo $decoded->getImageBlob(); 
?> 

我也尝试了在这个页面的代码,https://www.geeksforgeeks.org/php-imagick-steganoimage-function/和极客健忘的图像显示正确,但隐写图像显示为完全黑色。

代码语言:javascript
复制
<?php 

// Create a new imagick object 
$imagick = new Imagick( 
'https://media.geeksforgeeks.org/wp-content/uploads/geeksforgeeks-13.png'); 

// Create another Imagick object containing watermark 
$watermark = new Imagick('label:This is my secret.'); 

// Hide $watermark inside $imagick 
$imagick = $imagick->steganoImage($watermark, 64); 

// Write image to the local folder 
$imagick->writeImage('output.png'); 

// Set the offset 
$imagick->setSizeOffset($watermark->getImageWidth(), 
                   $watermark->getImageHeight(), 64); 

// Read the encoded image and extract secret 
$imagick->readImage('STEGANO:output.png'); 

// Show the output 
$imagick->setImageFormat('png'); 
header("Content-Type: image/png"); 
echo $imagick->getImageBlob(); 
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-13 01:11:42

看起来new Imagick('LABEL:Hello World!');已经不足以作为一个简单的标签了。在读取标签之前,您需要设置画布的大小和点大小。

代码语言:javascript
复制
define('STEGANO_OFFSET', 64); // Secret offset
define('STEGANO_WIDTH', 88);
define('STEGANO_HEIGHT', 14);

$watermark = new Imagick();
$watermark->setSize(STEGANO_WIDTH, STEGANO_HEIGHT);
$watermark->setPointSize(16);
$watermark->readImage('LABEL:Hello World!');

$stegano = $image->steganoImage($watermark, STEGANO_OFFSET);

我说不出是什么时候/为什么改变了,但是如果你运行以下命令.

代码语言:javascript
复制
convert 'label:Hello World!' decoded.png

..。您将获得以前从STEGANO:提取的相同图像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62232891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档