2016-02-11 27 views
4

我想合併圖像與它自己翻轉的圖像和旋轉角度說-60度。php合併圖像與它自己翻轉和旋轉視圖在不同的位置

假設我有1000 * 1000像素然後 A的圖像:原始圖像的大小調整爲在1000 * 1000方盒 乙右底部件500個* 500像素和地方:相同的圖像翻轉和通過-600度旋轉和發生在1000 * 1000的方盒子

一切工作正常,但只是發出如下 1左上角:一些邊境旋轉圖像 2:旋轉一個背景更暗使它看起來出價奇

測試用例:

樣本圖像(縮略圖的大小時,點擊打開原始圖像):

enter image description here

輸出圖像

enter image description here

下面是我的代碼

$image1=$image2=imagecreatefrompng('a.png'); 
//filter_opacity($image1, 25); 

$w=imagesx($image1); 
$h=imagesy($image1); 


$finala = imagecreatetruecolor($w, $h); 
$finalb = imagecreatetruecolor($w, $h); 
$finalc = imagecreatetruecolor($w, $h); 

$backgroundColora = imagecolorallocate($finala, 250,252,252); // gray 
$backgroundColorb = imagecolorallocate($finalb, 250,250,250); // gray 
$backgroundColorc = imagecolorallocate($finalc, 250,250,250); // gray 

imagefill($finala, 0, 0, $backgroundColora); 
imagefill($finalb, 0, 0, $backgroundColorb); 
imagefill($finalc, 0, 0, $backgroundColorc); 


$percent = 0.583; 
$new_width = $w * $percent; 
$new_height = $h * $percent; 
$wshift = $w/8.5; 
$hshift = $h/2.5; 


imagecopy($finala, $image1, 0,0,0,0,$w,$h); 
imagecopyresampled($finala, $image2,$wshift,$hshift,0,0, $new_width, $new_height, $w, $h); 
imagecopy($finalc, $image1, 0,0,0,0,$w,$h); 
imagecopyresampled($finalc, $image2,$wshift,$hshift,0,0, $new_width, $new_height, $w, $h); 
imagecopyresampled($finalb, $finalc,$w*0.3,$h*0.3,0,0, $w*0.6, $h*0.6, $w, $h); 
imageflip($finala, IMG_FLIP_HORIZONTAL); 
$finala = imagerotate($finala, -60, imageColorAllocateAlpha($finala, 0, 0, 0, 127)); 
imagecopyresampled($finalb, $finala,-$w*0.1,-$h*0.1,0,$h*0.20, $new_width, $new_height, $w, $h); 
header('Content-Type: image/jpeg'); 
imagejpeg($finalb); 
imagedestroy($finala); 
imagedestroy($image2); 
imagedestroy($image1); 
imagedestroy($final); 

回答

0

,因爲你需要旋轉和地方的同一圖像的頂部和底部,你沒有必要兩次$ _GET傳遞相同的圖像單一的時間就足夠了

// Source image 
$image = imagecreatefrompng("test.png"); 
$w=imagesx($image); 
$h=imagesy($image); 
$finalImage = imagecreatetruecolor($w, $h); 

// Bg add 
$backgroundColor = imagecolorallocate($finalImage, 252,252,252); // gray 
imagefill($finalImage, 0, 0, $backgroundColor); 

// New sizes calculation 
$percent = 0.5; 
$new_width = $w * $percent; 
$new_height = $h * $percent; 

// First image add 
imagecopyresampled($finalImage, $image, $new_width, $new_height, 0, 0, 
        $new_width, $new_height, $w, $h); 

// Second image rotate with transparant bg 
$transparency = imagecolorallocatealpha($image,0,0,0,127); 
$rotatedImage = imagerotate($image, -60, $transparency, 1); 
imagealphablending($rotatedImage, false); 
imagesavealpha($rotatedImage, true); 

// Getting new rotated image sizes to avoid cutting border 
$rw = imagesx($rotatedImage); 
$rh = imagesy($rotatedImage); 

// Second rotated image add with bigger space 
imagecopyresampled($finalImage, $rotatedImage, 0, 0, 0, 0, 
        $rw*$percent, $rh*$percent, $rw, $rh); 
// Outputing png image 
header('Content-Type: image/png'); 
imagepng($finalImage); 
+0

實際上我沒有得到那個邊界的問題,bot內容完全放在腳註裏面,注意是出了什麼問題?你可以附上更詳細的截圖 – Armen

+0

這是我得到的結果http://s17.postimg.org/pbv2fh526/download.jpg沒有邊框或顯示的東西,你可以發送你的結果,並突出顯示你的問題? – Armen

+0

這裏是我的例子:http://imgur.com/iwWX7vm,在我身邊的旋轉角度是'90度',但在你身邊似乎是'60度'?它可以是你的圖像有邊界? – Armen

0

改變這一行:

$finala = imagerotate($finala, -60, imageColorAllocateAlpha($finala, 0, 0, 0, 127)); 

$finala = imagerotate($finala, -60, imageColorAllocateAlpha($finala, 250, 252, 252, 127)); 

黑板應該走了!

+1

你能告訴它做什麼 – saurav

+0

@saurav它匹配你的finala的backgroundColora。 – Allen