我想使用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\" />";
答案 0 :(得分:0)
我发现了:
您必须自己保存图片:
对象$image2
有两个重要元素:$image2->source
,它是原始图像的文件名,$image2->resource
是文件资源,即PHP图像资源。此资源在此过程中已更改,但未保存到磁盘。
imagejpeg ($image2->resource, $images2->source);
会将文件以相同名称保存为JPG。