こんにちは!
今回DB上に保存されている画像データ(バイナリデータ)を取得し
Curlのアプレット上で一覧表示したいと思っております!
・バイナリデータを画像に変換?する方法
が分からず、困っています・・・
ご教授宜しくお願いします!
CurlでBinaryデータを画像表示
{let file-url:#Url = {choose-file filters=image-file-types}}
で選択した画像ファイルのPathを保存して
{let my-input:#ByteInputStream = {read-open-byte file-url}}
でURLをByteInputStreamで開いて
let photo:ImageData =
{ImageData.from-stream
my-input asa ByteInputStream
,"image/jpeg"
}
でByteInputStream ソースから ImageData を取得?して表示されるとこはできましたが
データベースから値をもってくる際に
ByteInputStream型で取得する方法はありますでしょうか?
現在はCsvDataReaderを使用しており、read-recordメソッドで取得しているので
型が#StringArrayになってしまいます。
from-streamメソッドを使用したいので
StringArrayを⇒ByteInputStreamへ型変換?する方法をご教授ください
よろしくおねがいします。
で選択した画像ファイルのPathを保存して
{let my-input:#ByteInputStream = {read-open-byte file-url}}
でURLをByteInputStreamで開いて
let photo:ImageData =
{ImageData.from-stream
my-input asa ByteInputStream
,"image/jpeg"
}
でByteInputStream ソースから ImageData を取得?して表示されるとこはできましたが
データベースから値をもってくる際に
ByteInputStream型で取得する方法はありますでしょうか?
現在はCsvDataReaderを使用しており、read-recordメソッドで取得しているので
型が#StringArrayになってしまいます。
from-streamメソッドを使用したいので
StringArrayを⇒ByteInputStreamへ型変換?する方法をご教授ください
よろしくおねがいします。
バイトデータをストリームとして扱いたいのであれば、
StringArrayをByteArrayに変換して、
そのByteArrayをByteArrayInputStreamとして生成できると思います。
StringArrayをByteArrayに変換して、
そのByteArrayをByteArrayInputStreamとして生成できると思います。
Code:
def bytes = {ByteArray}
|| TODO: ここでByteArrayに突っ込む。(append)
|| 以下のようにByuteArrayInputStreamの引数に上記ByteArrayを渡す。
def id = {ImageData.from-stream {ByteArrayInputStream bytes}, "image/jpeg"}>hokadaさん
お返事ありがとうございます!
しかしながら、自分の理解力と技術力不足により、
「StringArrayをByteArrayに変換」←わからなくて躓いています。
現在自分が試している方法は
{bytes.append test-array[0]}と記述していますが、
「String から uint8 にキャストすることはできません。」と
エラーが表示されてしまいます。
asaを使用しましたが同じく変換についてエラーが表示されてしまいました。。。
型変換?について教えてもらえたらなと思います!
宜しくお願いします。
お返事ありがとうございます!
しかしながら、自分の理解力と技術力不足により、
「StringArrayをByteArrayに変換」←わからなくて躓いています。
現在自分が試している方法は
{bytes.append test-array[0]}と記述していますが、
「String から uint8 にキャストすることはできません。」と
エラーが表示されてしまいます。
asaを使用しましたが同じく変換についてエラーが表示されてしまいました。。。
型変換?について教えてもらえたらなと思います!
宜しくお願いします。
StringArrayに格納されているデータがどういったものかわかっていないので、
単純キャストすれば、適切なデータになるかわかりませんが、
「Stringからuint8にキャストすることはできません。」というエラーだけ見ると、
Stringは複数バイトの文字列がはいっているため、uint8は1バイトのため、キャストできません。
そのためString内の1文字ずつをuint8(=byte)に変換する必要があります。
例えば、こんな感じですかね?
単純キャストすれば、適切なデータになるかわかりませんが、
「Stringからuint8にキャストすることはできません。」というエラーだけ見ると、
Stringは複数バイトの文字列がはいっているため、uint8は1バイトのため、キャストできません。
そのためString内の1文字ずつをuint8(=byte)に変換する必要があります。
例えば、こんな感じですかね?
Code:
{for test-array in xxxxx do
{for c in test-array do
{bytes.append c asa byte}
}
}>hokadaさん
ご教授ありがとうございます!
1文字ずつ変換してByteに変換することはできました!
しかし、そのバイト配列をImageDataにすることが出来ず・・・
勉強不足なのでもう少し勉強してきます!
ありがとうございました!
ご教授ありがとうございます!
1文字ずつ変換してByteに変換することはできました!
しかし、そのバイト配列をImageDataにすることが出来ず・・・
勉強不足なのでもう少し勉強してきます!
ありがとうございました!
う~ん、何でしょうね。。。
CsvRecordSetを使っていることですので、
DBに格納されているバイトデータ(BLOB型のデータとか?)を、
CSVファイルに保存して、それを読み込んでいるってことでしょうか?
CsvRecordSetを使っていることですので、
DBに格納されているバイトデータ(BLOB型のデータとか?)を、
CSVファイルに保存して、それを読み込んでいるってことでしょうか?
>hokadaさん
やりたいことは
画像binaryデータをCurlで表示する!ってだけなんですけどね・・・
Curlのコードに問題があるのか、
Curl以外のコードにミスがあるのか、
自分でも現在どこに行き詰っているのかわからなくて・・・
>CSVファイルに保存して、それを読み込んでいるってことでしょうか?
上記に関してはDBから値を取得する方法として
CSVの利用方法しか分からなかったのでそういう状態になっています・・・
苦労の末、ようやく完成いたしました!
hokadaさんに教えてもらったやり方以外に
良い?方法がありました!
{bytes.append {test-array[0].to-int} asa byte}
test-arrayをintへ変換し、そのあとにbyteに変換すれば
一文字ずつappendしなくても大丈夫でした!
for文で一文字ずつ取得するやり方は今後使うことがありそうなのでいい学習になりました!
ありがとうございます!
hokadaさんに教えてもらったやり方以外に
良い?方法がありました!
{bytes.append {test-array[0].to-int} asa byte}
test-arrayをintへ変換し、そのあとにbyteに変換すれば
一文字ずつappendしなくても大丈夫でした!
for文で一文字ずつ取得するやり方は今後使うことがありそうなのでいい学習になりました!
ありがとうございます!