117.info
人生若只如初见

PHP中位图文件的读取与保存

? PHP ?,??????????? GD ?? ImageMagick ?????????????????? GD ?????? BMP ???

??,???? PHP ????? GD ?????????????????????,????????????? BMP ???????? GD ???????,????????????????? BMP ???

$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("x", $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 ???

未经允许不得转载 » 本文链接:https://www.117.info/ask/feabfAzsBBQFRDQ.html

推荐文章

  • php rawurlencode怎样处理编码

    rawurlencode() ? PHP ??????,????????? application/x-www-form-urlencoded MIME ????????????? URL ??,??????????????????(??,??????? )?
    ??????????,???...

  • php var_dump能自定义输出吗

    是的,您可以使用 var_dump() 函数的第二个和第三个参数来自定义输出。
    var_dump() 函数可以接受以下参数: 变量:要检查的变量。
    输出选项:一个整数...

  • php var_dump怎样提高效率

    var_dump() 是一个非常有用的 PHP 函数,用于显示变量的详细信息。然而,在大型项目中,使用 var_dump() 可能会导致性能问题。以下是一些建议,可以帮助提高 var...

  • php var_dump在 web 中如何用

    var_dump() 是一个 PHP 函数,用于显示变量的详细信息,包括类型、值和结构。在 Web 环境中,你可以通过以下步骤使用 var_dump(): 创建一个 PHP 文件(例如:va...

  • 如何使用PHP处理位图图像

    在 PHP 中,可以使用 GD 库或 ImageMagick 库来处理位图图像 安装 GD 库:确保已经安装了 GD 库。大多数环境中默认已经安装。如果没有安装,请联系您的主机提供商...

  • Oracle MATCH函数与其他数据库匹配函数的比较

    Oracle数据库中的MATCH函数与其他数据库中的匹配函数在功能和使用上有一定的差异,主要体现在它们支持的匹配模式和搜索方式上。以下是Oracle MATCH函数与其他数据...

  • React组件与PHP后端的交互方式

    React 组件与 PHP 后端进行交互的常用方法是通过 API 调用。在这种情况下,您需要在 PHP 后端创建一个可以接收请求和发送响应的 API。前端则使用 JavaScript 发起...

  • PHP如何为React应用提供数据支持

    要使用PHP为React应用提供数据支持,您需要创建一个后端API,该API将允许React应用通过HTTP请求与服务器进行通信。以下是实现这一目标的基本步骤: 安装Composer...