2013-03-05 4 views
3

으로 변환합니다. 요청한 파일 내용을 byte[] (바이트 배열) 형식으로 반환하는 Java 웹 서비스가 있습니다. 때로는 이러한 파일은 HTML 파일이고 때로는 이미지이기도합니다. 파일 형식에 대한 제한이 없습니다. 이 배열을 유효한 이미지/문자열로 변환하는 방법을 찾고 있습니다. 내 텍스트 파일 작업은 다음과 같습니다 :PHP의 이진 바이트 배열을

$bytes = getArray(); 
    $string = implode(array_map("chr", $bytes)); 
    echo $string; 

이것은 echo $string;

‰PNG IHDR‘h6 pHYsÄÄ•+ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ,Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ–H3Q5€©BàƒÇÄÆáä[email protected] $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ãþåÏ«[email protected]á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ää!ò[ [email protected]¤ø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’„ 

의 출력 그러나 나는 어떻게 이미지 파일에 대해이 작업을 수행하는 아무 생각이 없습니다. 어떻게 든이 배열을 파일에 쓰고 이미지를로드 할 수는 있지만 프로젝트에서 저를 그렇게 할 수 없습니다. 나는 비행 중에 이것을해야한다.

답변

5

을 당신이 원하는 모든 사용자에게 이미지를 표시하는 경우 응답이있는 올바른 콘텐츠 헤더를 제공하기 만하면됩니다.

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 헤더)를 나타내는 것입니다. 이미 블롭 (blob)을 가지고 있기 때문에, 브라우저가 이미지로 해석하도록 헤더 만 있으면됩니다.

+0

나는 옳은 길에 있다고 생각합니다. 콘텐츠 유형을 수동으로 (URL에 따라) 추가하면 작동합니다. 그러나 위의 if/else 코드는 내용을 올바르게 인식하지 못합니다. 이것은 PNG에 대한 결과입니다 :''PNG' (''echo substr ($ string, 0, 4);') –

+0

와우, PNG의 매직 넘버가 잘못되었습니다. 결정된! –

+0

굉장합니다. 매력처럼 일하고. BMP 및 TIFF 이미지는 어떻습니까? 나는 그들에 대해 걱정해야합니까? –

0

당신은 여기에 표시된 예에서와 같은 의미

$body = file_get_contents('php://input'); 

을 시도하고도 PHP - get image from byte array

+0

사용 방법을 알려주시겠습니까? 출력을 리디렉션합니까? 배열 또는 뭔가를 울려 야합니까?! –

+0

당신이하는 일은 당신에게 달려 있습니다. file_put_contents를 사용하여 데이터를 파일에 쓸 수 있습니다. 이미지 데이터를 언급 했으므로 Imagick :: readImageBlob를 사용하여 ImageMagick 객체에 데이터를 드롭 할 수도 있습니다. 또 다른 방법은 GD를 사용하고 imagecreatefromstring으로 이미지를로드하는 것입니다. –

+1

확인. 나는 그 의견을 읽을 수 있었다. 솔루션 요청에서 스트림을 읽을 것을 제안합니다. 바이너리 데이터가 있습니다. 이미지로 변환하는 방법을 모르겠습니다. –

0

를 참조하십시오 http://us.php.net/manual/en/function.imagecreatefromstring.php

$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
     . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
     . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
     . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 
$data = base64_decode($data); 

$im = imagecreatefromstring($data); 
if ($im !== false) { 
    header('Content-Type: image/png'); 
    imagepng($im); 
    imagedestroy($im); 
} 
else { 
    echo 'An error occurred.'; 
} 
+0

위 코드에서 같은'$ string'을 사용하면 다음과 같이 표시됩니다 : imagecreatefromstring() : 빈 문자열 또는 잘못된 이미지 –

+0

$ string을 에코 할 때 무엇이 ​​표시됩니까? 질문에 추가하여 작업 할 수있는 데이터가 있습니까? – Husman

+0

감사합니다. 출력을 추가했습니다. –

0

아래 코드를 사용하여 바이트 배열 코드에서 이미지를 만들 수 있습니다.

$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; 
관련 문제