0

ここで、XML から送信された画像を表示するために使用する方法を特定するのに問題があります。次の XML 応答を受け取ります:-

   <?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header>
         <i18n:international xmlns:i18n="http://www.w3.org/2005/09/ws-i18n">
         <i18n:locale>en_US</i18n:locale></i18n:international>
    </soapenv:Header>
     <soapenv:Body>
     <get:GetCustAreaSnapshotResponseParam  xmlns:get="http://tnb.com.my/CGIS/D/getcustareasnapshotcon">
     <ResponseHdr>
     <ns2:ResponseId xmlns:ns2="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:ns1="http://tnb.com.my/CGIS/D/getcustareasnapshotpro">02946A91565A40210000013AB9B58E97</ns2:ResponseId>
     <ns2:ResTransactionId xmlns:ns2="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:ns1="http://tnb.com.my/CGIS/D/getcustareasnapshotpro">111112100334570</ns2:ResTransactionId>
  <ns2:ProviderId xmlns:ns2="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:ns1="http://tnb.com.my/CGIS/D/getcustareasnapshotpro">CGIS</ns2:ProviderId>
   <ns2:ResTimestamp xmlns:ns2="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:ns1="http://tnb.com.my/CGIS/D/getcustareasnapshotpro">2012-11-01T10:03:34.000+08:00</ns2:ResTimestamp>
    <ns2:ResStatus xmlns:ns2="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:ns1="http://tnb.com.my/CGIS/D/getcustareasnapshotpro">SUCC</ns2:ResStatus>
  <ns2:MsgCode xmlns:ns2="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:ns1="http://tnb.com.my/CGIS/D/getcustareasnapshotpro">IM-001</ns2:MsgCode>
   <ns2:MsgDesc xmlns:ns2="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:ns1="http://tnb.com.my/CGIS/D/getcustareasnapshotpro">Map Data Successfully Return to external Systems.</ns2:MsgDesc>
   </ResponseHdr>
   <ResGetCustAreaSnapshot>
       <cmc:GetCustAreaSnapshot xmlns:cmc="http://tnb.com.my/CGIS/D/cmc_customermgnt">
              <cmc:MAP_IMAGE_ZOOM1000>iVBORw0KGgoAAAANSUhEUgAAAaQAAAGkCAYAAAB+TFE1AAAQJUlEQVR4nO3d3XbbthZGUbgj7w==</cmc:MAP_IMAGE_ZOOM1000>
              <cmc:MAP_IMAGE_ZOOM2000>iVBORw0KGgoAAAANSUhEUgAAAaQAAAGkCAYAAAB+TFE1AAAHoElEQVR4nO3d3XKaUBhA0UMn7w==</cmc:MAP_IMAGE_ZOOM2000>
              <cmc:MAP_IMAGE_ZOOM4000>iVBORw0KGgoAAAANSUhEUgAAAaQAAAGkCAYAAAB+TFE1AAAHCklEQVR4nO3dya6bMABAUVPl</cmc:MAP_IMAGE_ZOOM4000>
       </cmc:GetCustAreaSnapshot>
  </ResGetCustAreaSnapshot>
  </get:GetCustAreaSnapshotResponseParam>

MAP_IMAGE_ZOOM を抽出してから base64_decode を使用することになっています。文字列をデコードした後、結果をエコーアウトすると次のように表示されます:-

 ‰PNG  IHDR¤¤~LQ5%IDATxœíÝÝvÛ¶FQ¸#ï

これはどのタイプのエンコーディングですか?? そして、それを画像として表示するにはどうすればよいですか?? 私が試してみました :

 file_put_contents('test4000.png',  base64_decode($bin));

しかし、表示される画像は空白です。

次のことも試しましたが、空白の画像も受け取りました。

 $img = html_entity_decode(base64_decode($bin), ENT_COMPAT,'ISO-8859-1');
 Header("Content-Type: image/png");
 die($img);

与えられた助けを大いに感謝します。

ありがとう

4

1 に答える 1

1

これは IHDR チャンクと IDAT チャンクを含む PNG ファイルです。これらは http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html で説明されています。 前のページhttp://www.libpng.org/pub/png/spec/1.2も参照してください。全体的な PNG 構造の/PNG-Structure.html 。

IHDR コンテンツは、それが 420x420 の画像であり、深さ 8 ビットの RGBA トリプル (色、透明度あり) であることを示しています。

IDAT は疑わしいほど短いですが、画像はすべて 1 色でどこかに小さな波線があるか、非常に単純な画像である可能性があります。Python で base64 文字列をいじり、デコードしたデータを PNG ファイルとして保存しました。画像読み取りアプリから「読み取りエラー」または「画像を読み込めません」と表示される場合は、おそらく IDAT が間違っているか、一般的な画像読み取り装置では認識されていない圧縮アルゴリズムを使用している可能性があります。

于 2012-11-01T03:01:38.693 に答える