解決策(または場合によってはそうではない)
フラッシュベース
現在のところ、最善の策は、Flash内からボタンを操作し続けることです。メインのFlashランタイムからボタンを移動する必要がある場合は、Flashの2つの埋め込みを使用して実行していることを試し、を使用してそれらの間で通信することができますLocalConnection
。ただし、これをうまく機能させるのは面倒なので、これはお勧めしませんLocalConnection
。また、2つのインスタンスで機能するセキュリティサンドボックスの問題に遭遇しないという保証はありません。
サーバーサイドベース
画像データをサーバーに送り返し、フロントエンドが要求できる実際のURLを作成する保存システムを実装できます。これにより、ダウンロードに必要なものを指定できます。これの欠点は、サーバーが必要なことです(したがって、オフラインアプリでは機能しません)。また、後でプルダウンするためだけに画像データを一方向に送信するという非常に多くの手間が必要です...
私はここでこれについてより詳細に行きました:
キャンバス画像から画像ファイルへ
HTML5ベース
現在、コメントで提案したように、データURLのダウンロードはまだ完全なソリューションではないため、お勧めしません。ただし、プラス面としては、上位のブラウザーが何を実装しているかに注意を払っています。その答えはまもなく変更される可能性があるためです。
仕組み
基本的に、データURIを介して画像のダウンロードを実装しようとしました(これが問題の最善の解決策であると考えています)。これはすべて正常に機能し、さらに、BitmapDataオブジェクトから必要なBase64データを非常にうまく導出できます。ただし、問題は、ダウンロードと一緒にファイル名を指定する方法がないことです。そのため、正しい拡張子さえ持たないかなり醜いファイル名になってしまいます。
<a href="data:image/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC">Click to Download File</a>
少し調べてみると、これに対する実行可能な回避策はないようですが、次のような実装の準備ができている仕様があります。
<a download="filename.png" href="data:image/octet-stream;...">Download File</a>
ダウンロード属性は、上記の問題に正確に対応するように設計されており、ダウンロードに名前を付けることができます。残念ながら、それを実装しているブラウザはまだ見つかりません...
参考文献