legongju.com
我们一直在努力
2025-01-14 18:23 | 星期二

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.legongju.com/article/107976.html

相关推荐

  • Alpine PHP环境配置有哪些要点

    Alpine PHP环境配置有哪些要点

    Alpine Linux是一个面向安全的轻量级Linux发行版,它包含了musl libc和busybox,这使得它的体积非常小,运行时的资源消耗也很低。然而,使用Alpine Linux作为PHP...

  • 如何优化AlpineLinux下的PHP性能

    如何优化AlpineLinux下的PHP性能

    要优化Alpine Linux下的PHP性能,可以采取以下措施: 选择合适的PHP版本:根据项目需求选择合适的PHP版本,例如PHP 7.x或PHP 8.x。新版本的PHP通常具有更好的性能...

  • Alpine PHP中GD库如何优化

    Alpine PHP中GD库如何优化

    在Alpine PHP中优化GD库,可以通过以下几个步骤来实现: 更新系统包:
    首先,确保你的系统包是最新的。运行以下命令来更新: apk update && apk upgrade 安...

  • Alpine PHP多版本管理如何实现

    Alpine PHP多版本管理如何实现

    在 Alpine Linux 上实现 PHP 多版本管理,可以使用一种叫做 sury PHP repository 的第三方软件源 首先,更新系统并安装必要的依赖: apk update
    apk add --...

  • 如何在React中处理PHP返回的JSON数据

    如何在React中处理PHP返回的JSON数据

    要在React中处理PHP返回的JSON数据,您需要遵循以下步骤: 首先,确保您的PHP脚本返回JSON格式的数据。例如,您可以创建一个名为data.php的文件,其内容如下: 在...

  • PHP与React在单页面应用中的应用对比

    PHP与React在单页面应用中的应用对比

    PHP和React是两种不同的技术,它们在单页面应用(SPA)开发中的使用方式和优势各有不同。以下是对PHP和React在单页面应用中应用的对比:
    PHP在单页面应用中...

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

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

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

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

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

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