php将图片转为二进制后,我想得到二进制的数据,但是直接在浏览上输出会乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php将图片转为二进制后,我想得到二进制的数据,但是直接在浏览上输出会乱码相关的知识,希望对你有一定的参考价值。

header(ContentType = "image/gif");
echo $a;//$a是存着的二进制数据
但是如果这样没有header,直接输出的话,就成乱码了。
我的目的是:想得到$a的数据,虽然现在已经得到了,但是保存不下来,保存下来的值是乱码的,好比我想把它保存在数据库中一样,是乱码的。

参考技术A 如果 你是想保存成图片文件的话, 那你就把二进制数据写到文件里, 记得文件后缀是 gif
For Example:
file_put_contents('1.gif', $a);追答

那你就如实把得到的 binary数据赋给 pic 参数 pic=$a, 不管是不是乱码

如何使用php和文件上传将图像转换为二进制字符串?

我试图转换二进制数据中的图像,但没有在PHP中获得解决方案。请帮忙

试图实现像这样的网址。 https://www.dcode.fr/binary-image

1。上传图片并转换。 2。这会将我的图像转换为二进制0和1格式。用简单的上传表单在php中尝试做同样的事情。

任何帮助将不胜感激。

答案

在互联网上有很多upload image tutorials,所以生病让你想出那个。

用于将图像转换为二进制。你基本上循环图像并查看每个像素,然后根据它的颜色输出1或0。

function img_to_bin($file, $scale = 100, $fudge = 0) {

    if (!is_int($scale)) {
        throw new InvalidArgumentException('Scale argument invalid expecting int, got: '.gettype($scale));
    }

    $info = getimagesize($file);
    $mime = $info['mime'];

    switch ($mime) {
        case 'image/jpeg':
            $image_create = 'imagecreatefromjpeg';
            break;

        case 'image/png':
            $image_create = 'imagecreatefrompng';
            break;

        case 'image/gif':
            $image_create = 'imagecreatefromgif';
            break;

        default: 
            throw new InvalidArgumentException('Unsupported image type: '.$mime);
    }

    $return = null;

    $img = $image_create($file);
    $img = imagescale($img, $scale, $scale);

    $width = imagesx($img);
    $height = imagesy($img);

    for ($y=0; $y < $height; $y++) {
        $line = [];
        for ($x=0; $x < $width; $x++) {
            // get current pixel colour
            $rgb = imagecolorat($img, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8 ) & 0xFF;
            $b = $rgb & 0xFF;
            $pixel = ($r + $g + $b)/3;

            // value above 0(white) is 1 
            if ($pixel > $fudge) {
                $line[] = "1";
            } else {
                $line[] = "0";
            }
        }

        $return .= implode('', $line).PHP_EOL;
    }
    return $return;
}

echo img_to_bin("./face.png", 50).PHP_EOL;

所以对于像这样的图像:

enter image description here

将输出:

00000000000000000000000000000000000000000000000000 00000000000000000000011111111100000000000000000000 00000000000000000011111111111111100000000000000000 00000000000000011111111111111111111100000000000000 00000000000000111111111111111111111110000000000000 00000000000011111111111111111111111111100000000000 00000000000111111111111111111111111111110000000000 00000000001111111111111111111111111111111000000000 00000000011111111111111111111111111111111100000000 00000000111111111111111111111111111111111110000000 00000001111111111111111111111111111111111111000000 00000011111111111111111111111111111111111111100000 00000111111111111111111111111111111111111111110000 00001111111111111111111111101111111111111111111000 00001111111111100111111111000111111111111111111000 00001111111111000111111111000111111111111111111000 00011111111111000111111110000111111111111111111100 00011111111111000111111110001111111111111111111100 00011111111111101111111111011111111111111111111100 00011111111111111111111111111111111111111111111100 00011110011111111111111111111111111111011111111100 00011110011111111111111111111111111111001111111100 00001111101111111111111111111111111110011111111000 00001111110111111111111111111111111101111111111000 00000111111011111111111111111111111011111111110000 00000111111100111111111111111111110111111111110000 00000011111110011111111111111111001111111111100000 00000011111111100111111111111110111111111111100000 00000001111111111001111111111001111111111111000000 00000000111111111110000000001111111111111110000000 00000000011111111111111111111111111111111100000000 00000000001111111111111111111111111111111000000000 00000000000111111111111111111111111111110000000000 00000000000011111111111111111111111111100000000000 00000000000000111111111111111111111110000000000000 00000000000000011111111111111111111100000000000000 00000000000000000011111111111111100000000000000000 00000000000000000000001111111000000000000000000000 00000000000000000000000000000000000000000000000000

以上是关于php将图片转为二进制后,我想得到二进制的数据,但是直接在浏览上输出会乱码的主要内容,如果未能解决你的问题,请参考以下文章

没有得到 QNetworkAccessManager post 方法的任何回复

C#winform 中上传图片保存到数据库中?

c# 图片转二进制流

php 如何将 16进制字符串转为16进制字符数组 或者将 2进制字符串转为16进制字符数组

怎样用php实现上传图片到数据库

将RM RMVB FLV AVI 等转为ASF