2011-11-29 66 views
0

我想使用imagecache Actions模塊來創建圖像疊加。用戶應該上傳一張圖片,我想縮放並剪裁,然後在上面覆蓋透明的PNG。正確使用imageapi_image_overlay?

我已經安裝了drupal 6和ImageCacheImageCache Actions模塊。 ImageCache操作定義了imageapi_image_overlay函數。

我創建了名稱爲590x160_Newsletter的ImageCache預設來縮放和剪裁圖像。

圖像工具是GD

繼承人是我想做的事:用戶上傳的圖像。該圖像被縮放並用ImageCache預設進行裁剪。然後我想疊加一個圖像(具有透明度的PNG)。我不能選擇它在預設中,因爲它取決於節點中的一些其他設置,我要使用哪個疊加圖像。

規模和作物確實很好,但撥打imageapi_image_overlay後的$image2仍然是一樣的(相同的路徑,相同的圖像),雖然它說'成功'。但是應該改變像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

我發現:

你必須保存圖像自己:

的對象$image2有兩個重要元素:$image2->source,它是原始圖像的文件名,$image2->resource是文件資源,即PHP圖像資源。此資源在過程中被更改,但未保存到磁盤。

imagejpeg ($image2->resource, $images2->source);將文件另存爲JPG下同名。