正确使用imageapi_image_overlay?

时间:2011-11-29 08:36:23

标签: php drupal drupal-6 drupal-modules

我想使用imagecache动作模块来创建图像叠加层。用户应该上传一个图像,我想缩放并裁剪它,然后在其上覆盖透明的PNG。

我已经安装了drupal 6和ImageCache以及ImageCache Actions模块。 ImageCache动作定义imageapi_image_overlay函数。

我创建了一个名为590x160_Newsletter的ImageCache预设来缩放和裁剪图像。

图像工具是GD

继承人我想做的事:用户上传图片。此图像使用ImageCache预设进行缩放和裁剪。然后我想用图像(具有透明度的PNG)覆盖它。我不能选择它在预设中,因为它取决于节点中的一些其他设置,我想要使用的叠加图像。

比例和裁剪确实有效,但调用$image2后的imageapi_image_overlay仍然是相同的(相同的路径,相同的图像),尽管它表示“成功”。但它应该像API reference所说的那样改变

这是一个测试代码

/* PHP */
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

print "<body style=\"background: lightgreen\">";
$path = "path/to/source/image.jpg";
$opath = "path/to/overlay/image.png";
print '<xmp>';
$image = imageapi_image_open($path);
print '$image: ' . print_r($image,1) . "\n";

$image2 =imageapi_image_open(imagecache_create_path('590x160_Newsletter',  $path));
print '$image2: ' . print_r($image2,1) . "\n";

$overlay = imageapi_image_open($opath);
print imageapi_image_overlay($image2, $overlay, 0, 0, 100, TRUE) ? "success\n" : "failure\n";

print '$image2 after: ' . print_r($image2,1) . "\n";
print '$overlay: ' . print_r($overlay,1) . "\n";
print '</xmp>';
print "<img src=\"$image->source\" />";
print "<img src=\"$image2->source\" />";
print "<img src=\"$overlay->source\" />";

1 个答案:

答案 0 :(得分:0)

我发现了:

您必须自己保存图片:

对象$image2有两个重要元素:$image2->source,它是原始图像的文件名,$image2->resource是文件资源,即PHP图像资源。此资源在此过程中已更改,但未保存到磁盘。

imagejpeg ($image2->resource, $images2->source);会将文件以相同名称保存为JPG。