欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實現(xiàn)添加圖片水印的示例代碼

 更新時間:2024年11月11日 09:16:49   作者:亞歷山大海  
這篇文章主要為大家詳細介紹了如何使用PHP實現(xiàn)添加圖片水印并根據(jù)比例計算水印的新尺寸,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

以下是 `_imgWatermark` 函數(shù)的中文注釋和解析。該函數(shù)用于在圖像上添加水?。?/p>

function _imgWatermark($src_image, $water_image, $path_image = '', $position = 10, $pct = 30, $angle = 15)
{
    // 檢查源圖和水印圖文件是否存在
    if (!is_file($src_image)) {
        $error = '源圖不存在';
        return false;
    }
    if (!is_file($water_image)) {
        $error = '水印圖不存在';
        return false;
    }
 
    // 獲取圖片信息
    $src_info = getimagesize($src_image);
    $water_info = getimagesize($water_image);
 
    // 定義允許的圖片 MIME 類型
    $allow = array(
        'image/jpeg' => 'jpeg',
        'image/gif' => 'gif',
        'image/jpg' => 'jpg',
        'image/png' => 'png',
        'image/pjpeg' => 'jpeg'
    );
 
    // 檢查圖像類型是否被允許
    if (!array_key_exists($src_info['mime'], $allow)) {
        $error = "源圖類型不支持添加水印";
        return false;
    }
    if (!array_key_exists($water_info['mime'], $allow)) {
        $error = "水印圖類型不支持";
        return false;
    }
 
    // 根據(jù) MIME 類型創(chuàng)建打開和保存圖片的函數(shù)
    $src_open = 'imagecreatefrom' . $allow[$src_info['mime']];
    $water_open = 'imagecreatefrom' . $allow[$water_info['mime']];
    $src_save = 'image' . $allow[$src_info['mime']];
 
    // 打開圖像資源
    $src = $src_open($src_image);
    $water = $water_open($water_image);
 
    // 根據(jù)比例計算水印的新尺寸
    $scale_factor = 0.15; // 水印的相對大小比例
    $new_water_width = $src_info[0] * $scale_factor;
    $new_water_height = ($water_info[1] / $water_info[0]) * $new_water_width;
 
    // 創(chuàng)建縮放后的水印圖
    $resized_water = imagecreatetruecolor($new_water_width, $new_water_height);
    imagealphablending($resized_water, false);
    imagesavealpha($resized_water, true);
    imagecopyresampled($resized_water, $water, 0, 0, 0, 0, $new_water_width, $new_water_height, $water_info[0], $water_info[1]);
 
    // 釋放原始水印資源,使用縮放后的水印
    imagedestroy($water);
    $water = $resized_water;
    $water_info[0] = $new_water_width;
    $water_info[1] = $new_water_height;
 
    if ($angle) {
        // 旋轉(zhuǎn)水印圖片
        $water = imagerotate($water, $angle, imageColorAllocateAlpha($water, 0, 0, 0, 127));
        // 獲取旋轉(zhuǎn)后的水印尺寸
        $sourceInfo[0] = imagesx($water);
        $sourceInfo[1] = imagesy($water);
        // 設(shè)置水印平鋪的間距
        $ww = $src_info[0] * 0.1;  // 水平方向間距
        $hh = $src_info[1] * 0.1;  // 垂直方向間距
    }
 
    if ($position == 10) {
        $offset_x = $water_info[0] / 2;
    }
 
    // 計算水印在源圖中的位置
    $start_x = $start_y = 0;
    switch ($position) {
        case 1:
            break;
        case 2:
            $start_x = floor(($src_info[0] - $water_info[0]) / 2);
            break;
        case 3:
            $start_x = $src_info[0] - $water_info[0];
            break;
        case 4:
            $start_y = floor(($src_info[1] - $water_info[1]) / 2);
            break;
        case 5:
            $start_x = floor(($src_info[0] - $water_info[0]) / 2);
            $start_y = floor(($src_info[1] - $water_info[1]) / 2);
            break;
        case 6:
            $start_x = $src_info[0] - $water_info[0];
            $start_y = floor(($src_info[1] - $water_info[1]) / 2);
            break;
        case 7:
            $start_y = $src_info[1] - $water_info[1];
            break;
        case 8:
            $start_x = floor(($src_info[0] - $water_info[0]) / 2);
            $start_y = $src_info[1] - $water_info[1];
            break;
        case 9:
            $start_x = $src_info[0] - $water_info[0];
            $start_y = $src_info[1] - $water_info[1];
            break;
        case 10:
            // 創(chuàng)建用于平鋪的圖像資源
            $fun = 'imagecreatefrom' . image_type_to_extension($src_info[2], false);
            $thumb = $fun($src_image);
            // 定義總長度
            $start_x = $src_info[0] - 0;
            $start_y = $src_info[1] - 0;
            $index = 0;
            $ccasd = 0;
            $ccasdy = 0;
            // 循環(huán)平鋪水印
            for ($x = 0; $x < $start_x; $x) {
                for ($y = 0; $y < $start_y; $y) {
                    if ($x == 0 && $y == 0) {
                        $x = round($ww / 2);
                    }
                    $index++;
                    imagecopy($src, $thumb, 0, 0, $x + $ccasd - $offset_x, $y + $ccasdy, $sourceInfo[0], $sourceInfo[1]);
                    imagecopy($src, $water, 0, 0, 0, 0, $sourceInfo[0], $sourceInfo[1]);
                    imagecopymerge($thumb, $src, $x + $ccasd - $offset_x, $y + $ccasdy, 0, 0, $sourceInfo[0], $sourceInfo[1], $pct);
                    $y += $sourceInfo[1] + $hh;
                }
                $x += $sourceInfo[0] + $ww;
                $index = 0;
            }
            $src_save($thumb, $path_image);
            imagedestroy($src);
            imagedestroy($water);
            return $imagename;
            break;
    }
 
    // 合并水印到源圖
    if (imagecopymerge($src, $water, $start_x, $start_y, 0, 0, $water_info[0], $water_info[1], $pct) && $position != 10) {
        $src_save($src, $path_image);
        imagedestroy($src);
        imagedestroy($water);
        return $imagename;
    } else {
        $error = "水印制作失敗";
        return false;
    }
}

關(guān)鍵點:

- **文件存在性檢查:** 確保源圖和水印圖文件存在。

- **支持的圖像類型:** 驗證圖像是否屬于支持的類型(JPEG、GIF、PNG)。

- **圖像縮放:** 根據(jù)比例縮放水印圖,使其相對于源圖的尺寸更小。

- **水印位置:** 水印可以根據(jù) `position` 參數(shù)被放置在源圖的不同位置。

- **水印平鋪:** 如果 `position` 設(shè)置為 10,水印將在整個圖像上平鋪。

- **透明度和旋轉(zhuǎn):** 水印可以通過 `angle` 和 `pct` 參數(shù)進行旋轉(zhuǎn)和調(diào)整透明度。

- **資源管理:** 函數(shù)確保所有圖像資源在使用后被銷毀以釋放內(nèi)存。

該函數(shù)為圖像添加水印提供了靈活的方式,允許用戶自定義水印的位置、透明度和平鋪方式。

到此這篇關(guān)于PHP實現(xiàn)添加圖片水印的示例代碼的文章就介紹到這了,更多相關(guān)PHP添加圖片水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論