Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中将二进制字节数组转换为图像_Php_Image - Fatal编程技术网

在PHP中将二进制字节数组转换为图像

在PHP中将二进制字节数组转换为图像,php,image,Php,Image,我有一个Java的web服务,它以byte[](字节数组)的形式返回请求的文件内容。有时这些文件是HTML文件,有时是图像。它是哪种文件类型没有限制。我正在寻找将此数组转换为有效图像/字符串的方法。我对文本文件的工作如下: $bytes = getArray(); $string = implode(array_map("chr", $bytes)); echo $string; 这是echo$字符串的输出 ‰PNG IHDR‘h6 pHYsÄÄ•+ OiCCPP

我有一个Java的web服务,它以
byte[]
(字节数组)的形式返回请求的文件内容。有时这些文件是HTML文件,有时是图像。它是哪种文件类型没有限制。我正在寻找将此数组转换为有效图像/字符串的方法。我对文本文件的工作如下:

    $bytes = getArray();
    $string = implode(array_map("chr", $bytes));
    echo $string;
这是
echo$字符串的输出

‰PNG  IHDR‘h6   pHYsÄÄ•+ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ,Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ–H3Q5€©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·Àβ0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6Ž¶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^ u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=ÔµC¹¨7„F¢Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8,  “c˱"¬«Æ°V¬»‰õcϱwEÀ    6wB aAHXLXNØH¨ $4Ú  7   „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞªUóUËT©^S}®FU3Sã©   Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õGX³$ÛÎ<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yn…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ?Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~'…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷  ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-Û cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFìIDATxÚÁIoUàyËŒ§3žÅN°/Ávš BÛiQ¥J=ô€¢^*nHpAøHÜøœzABÀ$$$TRDQ$$C’62‰—8Nâ‰ñÄÛxÞìoæñ} qðûÁ^Ã%¤T]ÆXl5O¿ÿqǸüo:J²ª)ÊÖÃ{Ÿ}úØš9öÌ~çÞ›èñö»\ˆ)atð²ùõ“Ÿ..NgF£B(§•ÆÑIä;•bŽã\Ô¥J)¿V)®ä–êõÃѳm‹±øÕB‡ÜÀ8ŸL®ž=¯Ó(,&–…çvE>ÇM’ÎIÏuü‚þÉ£íoßùcw÷×?ŸwÍQ»Ý1Œa±£1ÃÖtц>ä(cqÓ·>úà=”’²²tÿöíF·óÍoÏ\׉CŸ"Œ9  0f²`2ªZ-¬ü°³;š«ù…ÀΦ¶šÉ6»ƒ¬¦jXÂæpŒH‰Â5m]¿þBVÿíµùî[FKMK«Çýé|k£¦¨RL#<™â0E{£VãÓZVOï7FSëã÷·oÞ¸ùùW_Ôª¥‡÷ïò¼à{!øùÉ—–íÙsWH+¼ÏOϪÅ%âÞÜ*è‹Š¾Ð1z⢬æ5Ïá¤xàêºf†Oÿn•u­Z)ëZ˜Ñ:³ÑÑÑêu>;íÞÜñÜñXÂù>Ùk­îåúÝŒ9¾šM“±9JÙ Äñt"h®X­”Pry5kœÛ;- T+}bõGãõJe.ºÔóFn¸ ‹›¯—=xwÉ^s6&6Ç(@xAí•l»×{ZßgIÐ䯓þÍ·6’„
PNG IHDR'h6 pHYsÄÄÄ•+OICCPPOTOSHOP ICC profilexÚSgTSé=÷ÞBKˆ€“KoR RB耔和*!Jˆ!ÙQÁEEÈ710ŽŽŽŒQ,Ø216;ä!试一下吧


也可以参考

您的意思与此处所示的示例类似:


如果您只想向用户显示图像,只需提供正确的内容标题和响应:

if      (substr($string, 0, 4) == "\x89PNG")  header('Content-Type: image/png');
else if (substr($string, 0, 2) == "\xFF\xD8") header('Content-Type: image/jpeg');
else if (substr($string, 0, 4) == "GIF8")     header('Content-Type: image/gif');

echo $string;

图像实际上只是一个数据块(如您拥有的“字符串”)加上它是图像的指示(在HTTP中,这将是MIME头)。由于您已经拥有该数据块,您所需要的只是使浏览器将其解释为图像的头。

使用下面的代码,我们可以从字节数组代码创建图像

$userId             = $userid;
    $encoded_image      = $imgurl;
    $upload_path        = $_SERVER["DOCUMENT_ROOT"]."/projectName/uploads/";
    $LoginUserDetails   = $this->getUserDetails($userId);
    if ($LoginUserDetails->profile_image != "") {
        $dbimgname      = $LoginUserDetails->profile_image;
        unlink($upload_path .$dbimgname);
        unlink($upload_path . 'thumb_img/' . $dbimgname);
    }
    $decoded_image = base64_decode($encoded_image);
    $imgname       = md5(uniqid()) . ".png";
    file_put_contents($upload_path . $imgname, $decoded_image);

    $thumbnail      = $upload_path . "thumb_img/" . $imgname; // Set the thumbnail name
    $actual         = $upload_path . $imgname; // Set the actual image name
    // Get new sizes

    $upload_image = $upload_path.$imgname;
    //  print_r($actual); print_r($thumbnail); print_r($upload_image); die;
    list($width, $height) = getimagesize($upload_image);
    $newwidth  = 196; // This can be a set value or a percentage of original size ($width)
    $newheight = 196; // This can be a set value or a percentage of original size ($height)
    // Load the images
    $thumb     = imagecreatetruecolor($newwidth, $newheight);
    $source    = imagecreatefrompng($upload_image);
    //print_r($upload_image); print_r($source); die;
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // Resize the $thumb image.
    imagepng($thumb, $thumbnail, 100); // Save the new file to the location specified by $thumbnail

    return $imgname;

在上面的代码中使用相同的
$string
,它说:imagecreatefromstring():空字符串或无效图像当你回显$string时,它显示了什么?你能把它添加到你的问题中,这样我就可以处理一些数据了吗?用base64_decode()试试,也可以试试base64_encode()在字符串上,也尝试只使用字符串变量而不进行任何编码/解码。我不知道原始字节数组包含什么,所以我不确定哪个函数可以工作。您能告诉我如何使用它吗?它是否重定向输出?我是否应回显数组或其他什么吗?您如何处理该数据取决于您。您可以将数据写入文件使用文件\u put\u contents。正如您所提到的,它是图像数据,您还可以使用Imagick::readImageBlob将数据放入ImageMagick对象中。另一种方法是使用GD并使用imagecreatefromstring.OK加载图像。我可以读取注释。解决方案是建议从请求读取流。我有二进制数据。I只是不知道如何将其转换为图像。我想我的思路是正确的。当我手动添加内容类型(取决于URL)时,它可以工作。但是上面的if/else代码无法正确识别内容。这是PNG的输出:
‰PNG
(我的意思是
echo substr($string,0,4);
)太棒了。工作起来很有魅力。BMP和TIFF图像怎么样?我应该担心它们吗?取决于,你有没有遇到过它们?如果有,那么你应该担心它们。
if      (substr($string, 0, 4) == "\x89PNG")  header('Content-Type: image/png');
else if (substr($string, 0, 2) == "\xFF\xD8") header('Content-Type: image/jpeg');
else if (substr($string, 0, 4) == "GIF8")     header('Content-Type: image/gif');

echo $string;
$userId             = $userid;
    $encoded_image      = $imgurl;
    $upload_path        = $_SERVER["DOCUMENT_ROOT"]."/projectName/uploads/";
    $LoginUserDetails   = $this->getUserDetails($userId);
    if ($LoginUserDetails->profile_image != "") {
        $dbimgname      = $LoginUserDetails->profile_image;
        unlink($upload_path .$dbimgname);
        unlink($upload_path . 'thumb_img/' . $dbimgname);
    }
    $decoded_image = base64_decode($encoded_image);
    $imgname       = md5(uniqid()) . ".png";
    file_put_contents($upload_path . $imgname, $decoded_image);

    $thumbnail      = $upload_path . "thumb_img/" . $imgname; // Set the thumbnail name
    $actual         = $upload_path . $imgname; // Set the actual image name
    // Get new sizes

    $upload_image = $upload_path.$imgname;
    //  print_r($actual); print_r($thumbnail); print_r($upload_image); die;
    list($width, $height) = getimagesize($upload_image);
    $newwidth  = 196; // This can be a set value or a percentage of original size ($width)
    $newheight = 196; // This can be a set value or a percentage of original size ($height)
    // Load the images
    $thumb     = imagecreatetruecolor($newwidth, $newheight);
    $source    = imagecreatefrompng($upload_image);
    //print_r($upload_image); print_r($source); die;
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // Resize the $thumb image.
    imagepng($thumb, $thumbnail, 100); // Save the new file to the location specified by $thumbnail

    return $imgname;