74115


画像のアドレスに下記のようにアクセスして大量の文字列が返ってきたのですがこれの種類を教えて欲しい。  
またJavaScriptのinputからユーザがサーバにアップロードする画像も下記のような文字列で画像を受け取りたいのだが、base64等色々種類があってどれを使用して良いか分からないので教えていただきたいです。  
よろしくお願いします。

[code]

    import requests
    r = requests.get('画像url')
    print(r.content)
    
    
[/code]

**取得した結果データ**

[code]

    b'\x89PNG\r\n\x1a\n\x00\x00\x00\....
    
[/code]

## 追記

質問の説明が少なく申し訳ありません。  
ファイルの種類ではなく、このバイト文字列の種類を教えて頂きたいです。  
理由はJavaScriptのfileReaderというオブジェクトのプロパティに`readAsArrayBuffer()`というものがあってこれを使用するとinputで選択された画像をバイナリ?で受け取る事が出来ます。

もう一つ`readAsBinaryString()`というものもあってこちらの方が最適に思われるのですが、こちらは非推奨のプロパティでその文字列もPythonでのバイナリとどこか違います。

そこでバイナリにも種類がたくさんあるのかと疑問に思って、もしJavaScriptで受け取った画像をPythonで扱えるバイナリの文字列に変換するにはどうしたら良いのか分からなくなり質問しました。

下記のinputに画像ファイル等を選択するとコンソールログにバイナリ??がオブジェクトで出力されます。

[code]

    <!DOCTYPE html>
    <html>
    <head>
    <style>
        div#result { white-space: pre-wrap ; }
        input { width: 95% ; font-size: 16px ; }
    </style>
    </head>
    <body>
        <input type="file" multiple id="hoge">
    <hr>
        <div id="result"></div>
    <script>
    var element = document.getElementById( "hoge" ) ;
    var resultElement = document.getElementById( "result" ) ;
    
    element.onchange = function () {
        var fileReader = new FileReader() ;
    
        fileReader.onload = function () {
            console.log( this.result ) ;
            resultElement.appendChild( new Text( this.result ) ) ;
        }
    
        var file = element.files[0] ;
        fileReader.readAsArrayBuffer( file ) ;
    }
    </script>
    </body>
    </html>
[/code]

### 参照

<https://lab.syncer.jp/Web/API_Interface/Reference/IDL/FileReader/readAsArrayBuffer/>


CC BY-SA 4.0
2021-02-12T00:54:58.247
73941
2021-02-18T15:39:57.233
2021-02-12T01:53:28.080
22565
22565
question
python javascript python3 python-requests
Pythonのrequestsで画像を取得した際のr.contentと同じ形式でhtmlのinputに選択された画像も受け取りたい。


この文字列はPythonの`bytes`型データをPython独自のルールに従って文字列として表現したものです。独自と言っても基本的にはパーセントエンコーディングなどと同様のルールに基づいたものですので、特異なものではありません。  
しかしあくまでPythonの実装に依存したものですので、他のプログラミング言語とのデータ交換にそのまま用いることはできないと考えた方がいいです。

ご質問の場合はBase64を用いるのがよいかと思います。`FileReader`オブジェクトの`readAsDataURL`メソッドを用いれば、ファイルのデータをbase64でエンコーディングした文字列を得ることができるからです。

readAsDataURLメソッドの戻り値であるデータURLは次の書式を持つ文字列ですので、

[code]

    data:[<mediatype>][;base64],<data>
    
[/code]

<data>
部分だけを切り出してPythonの`base64`モジュールの`b64decode`関数に渡せば、元のファイルのデータと同じものをPythonのbytes型データとして得ることができます。

参考URL：  
[FileReader.readAsDataURL() - Web API |
MDN](https://developer.mozilla.org/ja/docs/Web/API/FileReader/readAsDataURL)  
[データ URL - HTTP |
MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/Data_URIs)  
[base64 --- Base16, Base32, Base64, Base85 データの符号化 — Python
ドキュメント](https://docs.python.org/ja/3/library/base64.html)

（補足）ちなみにPythonのrequestsモジュールのResponse.contentに入っているのはPythonのbytes型のデータです。'\x89PNG\r\n\x1a\n\x00\x00\x00...'
といった文字列（str型）が入っているわけではありません。bytes型のデータをprint関数に渡したことにより、文字列表現に変換されたものがコンソールへ表示されています。bという接頭辞は、この文字列の実体がbytes型のデータであることを示しています。


CC BY-SA 4.0
2021-02-18T15:39:57.233
74115
2021-02-18T15:39:57.233
43816
73941
answer