php imagick 擴充合成圖片的兩張方法

來源:互聯網
上載者:User
方法一:compositeimages

/**     *  function: 合成圖片     * @param  string      $output_url 圖片儲存路徑     * @param  string      $img_type   圖片檔案類型     * @param  integral    $line_num   每行顯示圖片數量     * @param  array       $logo_info  每張待合成圖片的資訊(要求所有尺寸統一)     * @param  array       $img_list  待合成的圖片絕對路徑     *      * @return void     */    public function generate($output_url, $img_type, $line_num, $logo_info, $img_list=array()) {        //計算圖片有多少行        $lines = ceil(count($img_list)/$line_num);        $bg_width = ($logo_info['width'] + $logo_info['line_width']) * $line_num;        $bg_height = ($logo_info['height'] + $logo_info['line_height']) * $lines;        //構建畫布        $canvas = new Imagick();        $canvas->newimage($bg_width, $bg_height, 'white');        $canvas->setimageformat($img_type);        $i = $j = 0;        foreach ($img_list as $item) {            $im = new Imagick($item);            $x = $logo_info['line_width']*2 + $i * $logo_info['width'];            $y = $logo_info['line_height']*2 + $j * $logo_info['height'];                        // $canvas->compositeimage($im -> getimage(), Imagick::COMPOSITE_OVER, $x, $y);            $canvas -> compositeimage($im, $im->getImageCompose(), $x, $y);            if (($i + 1) % $line_num === 0) {                $i = 0;                $j++;            } else {                $i++;            }            // unset($im);            $im -> destroy();        }        $canvas->writeimage($output_url);        //銷毀對象        $canvas -> destroy();    }



方法二:combineimages

/**     *  function: 合成圖片     * @param  string      $output_url 圖片儲存路徑     * @param  string      $img_type   圖片檔案類型     * @param  integral    $line_num   每行顯示圖片數量     * @param  array       $logo_info  每張待合成圖片的資訊(要求所有尺寸統一)     * @param  array       $img_list  待合成的圖片絕對路徑     *      * @return void     */    public function generate($output_url, $img_type, $line_num, $logo_info, $img_list=array()) {        //計算圖片有多少行        $lines = ceil(count($img_list)/$line_num);        $bg_width = ($logo_info['width'] + $logo_info['line_width']) * $line_num;        $bg_height = ($logo_info['height'] + $logo_info['line_height']) * $lines;        //構建畫布        $canvas = null;        $canvas = new Imagick();        $canvas -> newimage($bg_width, $bg_height, 'white');        $i = $j = 0;        foreach ($img_list as $item) {            $im = null;            $im = new Imagick($item);            // $canvas -> readImage($item);            $canvas -> addimage($im);            $im -> clear();            $im -> destroy();        }        // $canvas -> flattenImages();        $canvas -> combineImages( Imagick::CHANNEL_ALL );         $canvas -> writeimage($output_url);        //銷毀對象        $canvas -> clear();        $canvas -> destroy();    }

個人認為方法二效率更高
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.