- ベストアンサー
gifイメージをメモリ内に生成するには?
gifのイメージをメモリ内に直接生成するにはどうしたらいいでしょうか? gd を使っているのですが、ファイルにgifイメージを書き出す関数があるのにメモリに直接書き出す方法がわかりません。しかたなく、いったんtmpファイルに書き出してそれを読み込んだりしてるのですが、直接メモリ内に生成することはできないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私が参照したのはgdの中に入っていたマニュアルです。Webからだと下記URLで見れるようです。 当然英語なわけですが、この手のリファレンスマニュアルのたぐいは文法的には全然難しくないので、技術的な知識さえあれば、英語の知識はあまり要りません。下手に翻訳サイトを通した方が意味不明になります。 http://www.libgd.org/ImageCreation#void.2A_gdImageGifPtr.28gdImagePtr_im.2C_int_.2Asize.29_.28FUNCTION.29 原文: void* gdImageGifPtr(gdImagePtr im, int *size) (FUNCTION) Identical to gdImageGif except that it returns a pointer to a memory area with the GIF data. This memory must be freed by the caller when it is no longer needed. The caller must invoke gdFree(), not free(), unless the caller is absolutely certain that the same implementations of malloc, free, etc. are used both at library build time and at application build time. The 'size' parameter receives the total size of the block of memory. 訳: GIFデータのメモリーエリアへのポインタをreturnする以外は gdImageGif と同じ。 このメモリーは要らなくなったら呼び出し側でfreeされなければならない。 呼び出し側とライブラリが同じ実装のmallocやfreeなどを使っているかどうか確かでないなら、呼び出し側は free() ではなく gdFree() を呼び出さなければならない。 size パラメータは、メモリーのブロックのトータルサイズを受け取る。 ちなみに、他に gdImageGifCtx というのもあります。こっちはgdIOCtxという構造体を通して関数ポインタを渡すことで、 関数さえ用意すれば入出力をファイルでもメモリでも何に対しても行うことが出来ます。
その他の回答 (1)
- mtaka2
- ベストアンサー率73% (867/1179)
gdImageGif の代わりに gdImageGifPtr を使えば、GIFデータへのポインタが取得できます。
お礼
ありがとうございました。 簡単にできるんですね。知っていると、知らないでは大違いです。 御好意に甘えてもう一つ質問していいでしょうか? ご回答のような情報が書いてある資料はどこで手に入るのでしょうか? URLを教えていただければ幸いです。この質問をする前に Google でけっこう探したんですが見つからなかったんです。
お礼
重ね重ねありがとうございます。 ぼくが見つけられなかったのは、Googleで「日本語のページを検索」にしていたせいでした。 > 呼び出し側とライブラリが同じ実装のmallocやfreeなどを使っているか > どうか確かでないなら、呼び出し側は free() ではなく gdFree() を呼び > 出さなければならない。 ここらへんは知らないとたいへんですね。使用目的は対戦ゲームのサーバーで相手のアバターを送り出すところなので知らないとそのうちにメモリが無くなってしまいます。