2012-11-27 52 views
3

我想添加一個jpeg文件的圓角,但問題是,添加圓角後,我得到一個黑色的背景顏色。不知何故,我無法將其更改爲任何其他顏色(白色,透明,紅色)。它只是簡單地顯示圖像具有圓角的黑色背景。添加一個jpeg文件的圓角

,我使用的代碼是:

<?php 

    $image = new Imagick('example.jpg'); 
    $image->setBackgroundColor("red"); 
    $image->setImageFormat("jpg"); 
    $image->roundCorners(575,575); 
    $image->writeImage("rounded.jpg"); 
    header('Content-type: image/jpeg'); 
    echo $image; 

?> 

我不能使用PNG爲JPEG文件是巨大的,約5 MB,所以如果我使用PNG,文件的大小將上升到26 MB,即使png增加了透明的圓角。

而且,我現在用的IMagick版本是:

ImageMagick 6.6.2-10 2010-06-29 Q16 http://www.imagemagick.org 

而且輸出(生成的圖像)​​將得到印刷,所以我不知道,如果CSS將工作在這裏。

對不起,我試圖從一個已經存在的沒有圓角的jpeg文件中創建一個帶有圓角的新jpeg文件,這實際上是一張從相機拍攝的照片,所以存在多個/太多顏色所以我也不能使用gif。

另外我的網站只會生成圓角圖片,然後它會通過網站的管理員使用FTP程序下載,然後使用系統軟件將得到打印,所以總之我的網站將不會打印圖像而只是生成它

+0

實際文件大小真的不應該是一個問題。如果PNG爲你工作,那麼使用PNGS,因爲你得到透明內置。 – zaf

+0

問題是,如果我使用PNG,那麼不僅文件大小增加,但執行時間也增加對於Jpeg它是5秒PNG它是80秒 – Aditya

+0

然後你需要更多的內存! :) – zaf

回答

2

試試這個:

<?php 
$input = 'example.jpg'; 
$size = getimagesize($input); 
$background = new Imagick(); 
$background->newImage($size[0], $size[1], new ImagickPixel('red')); 
$image = new Imagick($input); 
$image->setImageFormat("png"); 
$image->roundCorners(575,575); 
$image->compositeImage($background, imagick::COMPOSITE_DSTATOP, 0, 0); 
$image->writeImage("rounded.jpg"); 
?> 
+0

非常感謝我終於能夠改變在jpg文件中黑色背景 – Aditya

2

我可能會得到downvoted,但我說讓CSS處理角落,並採取一些負載了你的服務器:)的

CSS rounded corners.

+0

輸出將打印出來,所以我不知道css是否會在這裏工作 – Aditya

+0

您正在從文件系統中拉出圖像,添加圓角並將其放置。多麼浪費資源。 我剛剛意識到iPad上沒有反引號鍵在跳轉遠程桌面...哈哈 – keyboardSmasher

+0

@keyboardSmasher也說,他們打印圖像.... – zaf

2

JPG沒有透明色(s)(alpha通道)在其調色板中。

輸出圖像必須使用PNG或GIF(或其他支持alpha通道的圖像格式)。

setImageBackgroundColor是另一種選擇,如果你想要一個不透明的背景。


編輯

你的評論讓我想起,你可以嘗試使用命令行; shell_exec()將從PHP運行命令行參數。您需要從ImageMagick API開始的命令是convert example.jpg,然後您可以使用所需的各種參數傳遞標誌。

由於ImageMagick已經安裝,它會馬上工作。您可能需要將系統PATH指向所有可執行文件所在的ImageMagick目錄。

有很多問題和論壇專門用這個方法圓角,所以我會留給你。

這裏有一個有用的提示,但 - 有一個愚蠢的困惑與convert命令,因爲Windows還擁有一個很少使用的convert.exe,但會迷惑你的命令行,所以一定要確保你調用正確的convert。 ;)要測試它是否工作,請嘗試convert example.jpg example.gif(它應該將您的示例轉換爲gif)。

要從命令行獲得輸出,請完成與2>&1的所有命令,這些命令將管道cmdoutput back into PHP

+0

transparent is not what i am aiming for i just need to change the black color that is getting displayed as the background – Aditya

+0

I tried "setImageBackgroundColor" even then it won't work I also tried $image-> setBackgroundColor(new ImagickPixel(「red」)); $ image-> setBackgroundColor(「red」); $ image-> setImageBackgroundColor(「red」); 一次一個,但他們都不似乎工作 – Aditya

+0

我曾經看到有人寫,你需要添加 -alpha關: - 「加入這可以防止JPG與黑色背景創建」 但它沒不知道我想要將它添加到我的PHP腳本中的確切位置或如何設置 – Aditya