HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0204
ねらひかだnoteloadで画像を読み込みたい20解決


ねらひかだ

リンク

2017/2/4(Sat) 20:28:57|NO.78122

画像をテキストとして扱いたいのですが、下記のコードだと画像が正しく保存されません。


notesel test noteload "test.jpg" notesave "test2.jpg"


自分が調べた結果、画像に終了コードが含まれている?らしいのですが…
(URL: http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1180605191)
これの解決策、もしくは別の方法などありますでしょうか?



この記事に返信する


Cheesehamburg7273

リンク

2017/2/4(Sat) 21:23:29|NO.78123

僕が勝手に考えた結果ですがjpgとかにはnullが含まれていてnote系の命令では
扱えないような気がしますが...
そもそもなぜ画像を文字列にする必要があるのですか?



ねらひかだ

リンク

2017/2/5(Sun) 01:53:22|NO.78125

>>僕が勝手に考えた結果ですがjpgとかにはnullが含まれていてnote系の命令では扱えないような気がしますが...
note系以外に方法はありますでしょうか…?

>>そもそもなぜ画像を文字列にする必要があるのですか?
HTTPサーバーを作成していて、リクエストがあった時に文字列として渡したいのです。



スペース

リンク

2017/2/5(Sun) 01:55:55|NO.78126

note以外だとbloadとかですかね。



ねらひかだ

リンク

2017/2/5(Sun) 08:37:16|NO.78128

>>note以外だとbloadとかですかね。

bload "test.jpg",test
bsave "test2.jpg",test

試してみましたが、noteと同じ結果になりました…。



tds12

リンク

2017/2/5(Sun) 10:20:24|NO.78129

文字列とはBASE64のことでしょうか?



ねらひかだ

リンク

2017/2/5(Sun) 10:25:04|NO.78130

>>文字列とはBASE64のことでしょうか?
画像をメモ帳などのソフトで開いたときのような文字を得たいのです…



あり

リンク

2017/2/5(Sun) 10:29:46|NO.78131

これでもだめですか?
notesel test
noteload "test.jpg" bsave "test2.jpg", test



窓月らら

リンク

2017/2/5(Sun) 11:17:30|NO.78132

どうぞ。

exist "test.jpg" // ファイルサイズを取得 sdim buf,strsize // ファイルサイズ分のメモリ(バッファ)を確保 bload "test.jpg",buf // バッファにロード bsave "test2.jpg",buf // バッファをファイルに保存



沢渡

リンク

2017/2/5(Sun) 13:27:39|NO.78136

tds12さんの仰ってるBASE64というのは、バイナリデータを文字列に変換するための方法です。
バイナリデータには文字として表示できないコードが多数含まれているので、
文字列にしてやりとりしたい場合は、変換してやる必要があるのです。
"BASE64 HSP"でググるとHSP向けのモジュールを公開しているサイトが見つかるので、
利用してみると良いかもしれません。



ねらひかだ

リンク

2017/2/5(Sun) 13:28:51|NO.78137

>>あり 様
>>窓月らら 様
ありがとうございます!
お二方のスクリプト、両方とも動作しました。

ですが…先程言ったのですが、HTTPサーバーを作成しているのですが、どうしても4byteしか送信されません…



KA

リンク

2017/2/5(Sun) 21:43:54|NO.78147

要するに「バイナリデータを送受信したい」ですか?



沢渡

リンク

2017/2/5(Sun) 23:12:37|NO.78148

推測ですが、画像(バイナリ)データを無理矢理テキストデータと同じ方法で配信していて、
それで上手く行かないということでしょうか?

念のため言いますが、「画像をメモ帳などのソフトで開いたときのような文字」は、
元のデータをそっくりそのまま反映しているわけではありませんよ?
「文字にできるコード」だけを文字にして、そうでないコードは無視しているので、
どうしてもデータの欠落が発生します。
ですから、バイナリデータをテキストの形に変換するためには、BASE64等の方法が必要になるのです。



OK

リンク

2017/2/5(Sun) 23:29:51|NO.78149

たぶん画像データを一度

bload
して、16進数で表現し、それをテキストで保存して送信ですね。



ねらひかだ

リンク

2017/2/6(Mon) 01:38:43|NO.78150

>>KA 様
>>要するに「バイナリデータを送受信したい」ですか?
そうです。バイナリデータを送信したいのです。

>>沢渡 様
>>念のため言いますが、「画像をメモ帳などのソフトで開いたときのような文字」は、元のデータをそっくりそのまま反映しているわけではありませんよ?
その辺は、一応理解しているつもりでいましたが…
>>推測ですが、画像(バイナリ)データを無理矢理テキストデータと同じ方法で配信していて、それで上手く行かないということでしょうか?
そうですね、バイナリデータを無理矢理テキストデータと同じ方法で配信しようとしていました…。
>>バイナリデータをテキストの形に変換するためには、BASE64等の方法が必要になるのです。
予め、画像をBASE64でエンコードしておき、送信するときにでコードすればいいのでしょうか?



回答者様へ
かなり回りくどい質問をしてしまい申し訳ございませんでした。
私の本来の目的は、「noteloadで画像を読み込むこと」ではなく、「バイナリデータを送信すること」です。

http://shonen9th.blog.fc2.com/blog-entry-28.html
こちらのサイトを参考にし、HTTPサーバーを作成していたのですが、画像のリクエストを返そうとして失敗しました…。
(一応コードはこのような感じです。txresponse周辺ですが…)
notesel test
noteload "test.jpg" size = strsize txresponse = "HTTP/1.1 200 OK\nContent-Length: " + size + "\nContent-Type: image/jpge\n\n" + test
なので、「noteloadで読み込めれば送信できるだろう」という安易な考えで質問してしまいました。
本当に申し訳ありませんでした…。



KA

リンク

2017/2/6(Mon) 20:42:29|NO.78155

>>予め、画像をBASE64でエンコードしておき、送信するときにでコード

×送信
〇受信

それは別として、一般的に受信出来る方法なのか、専用のソフトを用意
する方法なのかで、回答も方法も変わります。



eo

リンク

2017/2/6(Mon) 22:25:35|NO.78158

バイナリデータは+で加算できません。
memcpyでつなげるとよいです。
あとバイナリデータの送信はsockputではなくsockputbで送ります。



ねらひかだ

リンク

2017/2/9(Thu) 00:03:41|NO.78196

>>KA 様
HTTPサーバーなので画像を送信する であってると思うのですが…
アクセスするのは普通のブラウザです。

>>eo 様
ありがとうございます。
試しに書いてみたのですが…
exist "test.jpg"
size = strsize sdim test, size bload "test.jpg", test res = "HTTP/1.1 200 OK\n\n" memcpy res, test, size sockputb res, 0, ?
多分凄くひどいコードだと思います…
これだと、memcpyでバッファオーバーフローが発生してしまいます。
そして、sockputbの第3引数がよく分かりません…
よろしければサンプルコードなどを教えて頂けると有難いです。



syam

リンク

2017/2/9(Thu) 01:26:29|NO.78197

やりたいことが今一つハッキリしないんですが

exist "test.jpg" size = strsize sdim test, size bload "test.jpg", test sockputb test, 0, size, 0
これとは違いますか?
NO.78150のURLのサイトのサンプルにこれを組み込んで試したところ、これでとりあえず画像は出ますね。



eo

リンク

2017/2/9(Thu) 07:45:17|NO.78200

>これだと、memcpyでバッファオーバーフローが発生してしまいます。
なんか根本的なことがわかってない気がします。
もうちょっと基本的なことを理解してから挑戦した方がいいんじゃないでしょうか。
とりあえずバイナリを送信したいだけなら連結しなくても、以下のように2回送信するように修正すればいけると思います。

notesel test noteload "test.jpg" size = strsize txresponse = "HTTP/1.1 200 OK\nContent-Length: " + size + "\nContent-Type: image/jpge\n\n" sockput txresponse,0 sockputb test,0,size,0



ねらひかだ

リンク

2017/2/11(Sat) 13:41:29|NO.78224

>>syam 様
スクリプトありがとうございます。
バイナリデータとHTTPステータスコードを一緒に返したいのです…。

>>eo 様
>>なんか根本的なことがわかってない気がします。
そうですね…。申し訳ありません。
もっと勉強します…。
>>とりあえずバイナリを送信したいだけなら連結しなくても、以下のように2回送信するように修正すればいけると思います。
ありがとうございます!
期待通りの動作をしました!
2回送信すればいいのですか…
HTTPステータスコードとバイナリが一緒に送信されるという風に考えていたのがだめだったみたいですね…。
eo様ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.