注:ゲット読みますこの機能を備えたy製パレットhere。
Arnoudのソリューションは私を興奮させ、辛抱強くしています。彼のコードを勉強しなければ、私はこれを行うことができませんでした。このバージョンはやや信頼性が高く、タイムアウトエラーが発生しにくいようですが、正直言ってJavaはまったく分かりませんので、改善が歓迎されています。
このバージョンはstack.imgur.com
に直接アップロードされるので、StackOverflowでここで使用すると安全です。しばらくするとアップロードされた画像が消えることを心配する必要はありません。
私は、次の3つの機能を提供:
stackImage
はPNGとしてエクスポート表現を、アップロードし、クリップボードへ
stackCopyMarkdown
コピー値下げをコピーする準備ができて、URL
stackMarkdown
が値下げを返しますが
次の手順:選択したグラフィックに対して自動的にこれを行うパレットボタンを作成する電子ノート。コードの改善は大歓迎です。
Needs["JLink`"]
stackImage::httperr = "Server returned respose code: `1`";
stackImage::err = "Server returner error: `1`";
stackImage[g_] :=
Module[
{getVal, url, client, method, data, partSource, part, entity, code,
response, error, result},
(* this function attempts to parse the response fro the SO server *)
getVal[res_, key_String] :=
With[{k = "var " <> key <> " = "},
StringTrim[
[email protected][[email protected][res, StringMatchQ[#, k ~~ ___] &],
k ~~ v___ ~~ ";" :> v],
"'"]
];
data = ExportString[g, "PNG"];
JavaBlock[
url = "https://stackoverflow.com/upload/image";
client = JavaNew["org.apache.commons.httpclient.HttpClient"];
method = JavaNew["org.apache.commons.httpclient.methods.PostMethod", url];
partSource = JavaNew["org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource", "mmagraphics.png", MakeJavaObject[data]@toCharArray[]];
part = JavaNew["org.apache.commons.httpclient.methods.multipart.FilePart", "name", partSource];
[email protected]["image/png"];
entity = JavaNew["org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity", {part}, [email protected][]];
[email protected][entity];
code = [email protected][method];
response = [email protected][];
]
If[code =!= 200, Message[stackImage::httperr, code]; Return[$Failed]];
response = StringTrim /@ StringSplit[response, "\n"];
error = getVal[response, "error"];
result = getVal[response, "result"];
If[StringMatchQ[result, "http*"],
result,
Message[stackImage::err, error]; $Failed]
]
stackMarkdown[g_] := "![Mathematica graphics](" <> stackImage[g] <> ")"
stackCopyMarkdown[g_] := Module[{nb, markdown},
markdown = Check[stackMarkdown[g], $Failed];
If[markdown =!= $Failed,
nb = NotebookCreate[Visible -> False];
NotebookWrite[nb, Cell[markdown, "Text"]];
SelectionMove[nb, All, Notebook];
FrontEndTokenExecute[nb, "Copy"];
NotebookClose[nb];
]
]
更新:
ここでの選択のプレビューが表示され、アップロード(またはキャンセル)を提供するためのボタンです。これまでの関数を定義する必要があります。パレット寸法がラスタライズに影響を与えることになるので、
Button["Upload to SO",
Module[{cell = [email protected][], img},
If[cell =!= {}, img = Rasterize[cell];
MessageDialog[
Column[{"Upload image to StackExchange sites?",
img}], {"Upload and copy MarkDown" :> stackCopyMarkdown[img],
"Cancel" :> Null}, WindowTitle -> "Upload to StackExchange"]]]]
残念ながら、私は、パレット(CreatePalette
)にボタンを配置することはできません。この問題に対する解決策は大歓迎です。
アップデート2:
button = Button["Upload to SO",
Module[{sel},
FrontEndExecute[
FrontEndToken[FrontEnd`SelectedNotebook[], "CopySpecial", "MGF"]];
sel = Cases[[email protected][],
RasterBox[data_, ___] :>
Image[data, "Byte", ColorSpace -> "RGB", Magnification -> 1],
Infinity];
If[sel =!= {},
With[{img = First[sel]},
MessageDialog[
Column[{"Upload image to StackExchange sites?",
img}], {"Upload and copy MarkDown" :> stackCopyMarkdown[img],
"Cancel" :> Null}, WindowTitle -> "Upload to StackExchange"]
]
]
]
]
CreatePalette[button]
警告:this questionへの回答に基づいて
は、ここで働くWindows専用パレットボタンだ、それはあなたがキャンセル]をクリックしても、クリップボードの内容を破壊しますプレビューボックス。
「http:// i.stack.imgur.com /」へのアップロードが難しいことに注意してください(SOインターフェースを「駆動」する必要があります)。 –
@belisariusおっと、私はそのことを知らなかったStackOverflow別のimgurサイトを使用しています... imgurのメインのサイトでは、画像は永遠に保存されない可能性がありますので、おそらくSOのために使用することはお勧めできませんhttp://imgur.com/faq#long(少なくとも1つのビュー/それらが保たれるためには6ヶ月が必要です) – Szabolcs
手作業でグラフィックスを投稿することはそれほど難しくありません(V8)。グラフィックを右クリックし、 "Save Image as ..."を選択します。次に、ファイルダイアログボックスが最後に開いた場所です。これは通常、output.pngというファイルが次のインカネーションで上書きされるのを待っているデスクトップです。 2回のクリックはすべて、2回以上のクリックは私の答えのボックスに掲載されます。たった15秒かかります。 Markdownラインを取得して貼り付けると、ほぼ同じ時間がかかります。 –