php將兩張身份證圖片合併到一張圖

流火行者發表於2017-02-16
    /**
     * @desc 合併身份證的正反面到同一張圖片
     * @author Jimmy
     * @date 2016-12-33
     * @param $imageSrc0 身份證正面
     * @param $imageSrc1 身份證反面
     * @param $desPath 合併後圖片地址
     * @return mixed
     */
    public static function mergeImage($imageSrc0, $imageSrc1, $dirPath){
        !file_exists($dirPath)&&mkdir($dirPath);
        $imagePath0=self::rotateImage($imageSrc0,$dirPath);
        $imagePath1=self::rotateImage($imageSrc1,$dirPath);
        $size0=getimagesize($imagePath0);
        $size1=getimagesize($imagePath1);
        $image0_width=$size0[0];
        $image0_height=$size0[1];
        $image1_width=$size1[0];
        $image1_height=$size1[1];
        if($image0_width>$image1_width){
            $canvas_width=$image0_width;
        }else{
            $canvas_width=$image1_width;
        }
        $canvas_height=$image0_height+$image1_height;
        $im0=imagecreatefromjpeg($imagePath0);
        $im1=imagecreatefromjpeg($imagePath1);
        $canvas=imagecreatetruecolor($canvas_width,$canvas_height);
        imagefill($canvas,0,0,imagecolorallocate($canvas,255,255,255));
        $img0_x=($canvas_width-$image0_width)/2;
        $img1_x=($canvas_width-$image1_width)/2;
        imagecopyresampled($canvas,$im0,intval($img0_x),0,0,0,$image0_width,$image0_height, $image0_width,$image0_height);
        imagecopyresampled($canvas,$im1,intval($img1_x),$image0_height,0,0,$image1_width,$image1_height, $image1_width,$image1_height);
        $desPath = $dirPath. Uuid::createUuid().'.jpg';//這裡只是使用寫好的Uuid給圖片取一個唯一的名字
        file_exists($desPath)&&unlink($desPath);
        imagejpeg($canvas,$desPath,100);
        if($imagePath0!=$imageSrc0)file_exists($imagePath0)&&unlink($imagePath0);
        if($imagePath1!=$imageSrc1)file_exists($imagePath1)&&unlink($imagePath1);
        return $desPath;
    }

    /**
     * @desc 旋轉長圖片為寬圖片
     * @author Jimmy
     * @date 2016-12-22
     * @param $imagePath
     * @return string
     */
    public static  function rotateImage($imagePath,$dirPath){
        !file_exists($dirPath)&&mkdir($dirPath);
        $size=getimagesize($imagePath);
        if($size[0]<$size[1]){//圖片需要旋轉90度
            $img=imagecreatefromjpeg($imagePath);
            $rotate=imagerotate($img,90,0);
            $desPath = dirname($dirPath). Uuid::createUuid().'.jpg';
            imagejpeg($rotate,$desPath);
            return $desPath;
        }else{
            return $imagePath;
        }
    }


注意:由於使用者上傳的身份證正反面有可能是橫向的也有可能是豎向的,程式考慮了橫圖片(長度大於寬度)和豎圖片(長度小於寬度)的不同情況,

遇到豎圖片需要將之先旋轉為橫圖片,這樣才能讓最後合成的圖片都是橫向的。

相關文章