亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

PHP中位圖文件的讀取與保存

PHP
小樊
84
2024-08-28 05:55:12
欄目: 編程語言

在 PHP 中,處理位圖文件通常是通過 GD 庫或 ImageMagick 庫來實現的。這里我將向您展示如何使用 GD 庫讀取和保存 BMP 文件。

首先,確保您的 PHP 安裝包含了 GD 庫。大多數環境中默認都包含了這個庫。接下來,我們需要創建一個函數來讀取 BMP 文件并將其轉換為 GD 圖像資源。然后,我們可以選擇將該圖像資源保存為新的 BMP 文件。

<?php
function imagecreatefrombmp($filename) {
    $file = fopen($filename, "rb");
    $read = fread($file, 10);
    while (!feof($file) && ($read<>"")) {
        $read .= fread($file, 1024);
    }
    $temp = unpack("H*", $read);
    $hex = $temp[1];
    $header = substr($hex, 0, 108);
    if (substr($header, 0, 4) == "424d") {
        $header_parts = str_split($header, 2);
        $width = hexdec($header_parts[19] . $header_parts[18]);
        $height = hexdec($header_parts[23] . $header_parts[22]);
        unset($header_parts);
    }
    $x = 0;
    $y = 1;
    $image = imagecreatetruecolor($width, $height);
    $body = substr($hex, 108);
    $body_size = strlen($body);
    $header_size = ($width * $height);
    $usePadding = false;
    if ($body_size < $header_size * 3) {
        $usePadding = true;
    }
    for ($i = 0; $i < $body_size; $i += 3) {
        if ($x >= $width) {
            if ($usePadding) {
                $i += $width % 4;
            }
            $x = 0;
            $y++;
            if ($y > $height) {
                break;
            }
        }
        $color = imagecolorallocate($image, hexdec($body[$i + 2]), hexdec($body[$i + 1]), hexdec($body[$i]));
        imagesetpixel($image, $x, $height - $y, $color);
        $x++;
    }
    unset($body);
    return $image;
}

function imagebmp(&$image, $filename = false) {
    $width = imagesx($image);
    $height = imagesy($image);
    $colors = imagecolorstotal($image);

    if ($filename === false) {
        $filename = "php://output";
    }

    $result = fopen($filename, "wb");

    // BMP header
    $header = "BM";
    $header .= pack("V", 54 + $width * $height * 3); // File size
    $header .= pack("V", 0); // Reserved
    $header .= pack("V", 54); // Offset to image data

    // DIB header
    $header .= pack("V", 40); // Header size
    $header .= pack("V", $width); // Width
    $header .= pack("V", $height); // Height
    $header .= pack("v", 1); // Planes
    $header .= pack("v", 24); // Bits per pixel
    $header .= pack("V", 0); // Compression
    $header .= pack("V", $width * $height * 3); // Image size
    $header .= pack("V", 0); // Horizontal resolution
    $header .= pack("V", 0); // Vertical resolution
    $header .= pack("V", 0); // Colors used
    $header .= pack("V", 0); // Important colors

    fwrite($result, $header);

    for ($y = $height - 1; $y >= 0; $y--) {
        for ($x = 0; $x < $width; $x++) {
            $color = imagecolorat($image, $x, $y);
            $rgb = sprintf("%06x", $color);
            fwrite($result, pack("C*", hexdec(substr($rgb, 4, 2)), hexdec(substr($rgb, 2, 2)), hexdec(substr($rgb, 0, 2))));
        }
        fwrite($result, pack("C*", 0, 0, 0, 0));
    }

    fclose($result);
}

// 讀取 BMP 文件
$image = imagecreatefrombmp("input.bmp");

// 保存為新的 BMP 文件
imagebmp($image, "output.bmp");

// 銷毀圖像資源
imagedestroy($image);
?>

這段代碼定義了兩個函數:imagecreatefrombmp() 用于從 BMP 文件創建 GD 圖像資源,imagebmp() 用于將 GD 圖像資源保存為 BMP 文件。請注意,這些函數僅適用于 24 位 BMP 文件。

0
新密市| 高邑县| 双辽市| 闵行区| 常山县| 长汀县| 五家渠市| 奇台县| 龙胜| 栖霞市| 高雄市| 芷江| 陈巴尔虎旗| 调兵山市| 临桂县| 盱眙县| 田林县| 根河市| 宝丰县| 锦屏县| 西乡县| 庄浪县| 临城县| 朝阳市| 安徽省| 景德镇市| 通山县| 新蔡县| 凤冈县| 广安市| 永平县| 阳春市| 乡宁县| 阳原县| 铜梁县| 德州市| 高平市| 株洲县| 石阡县| 阿拉善右旗| 林周县|