这是对所有 mathematica
标记粉丝的挑战 . 让我们通过创建imgur上传器将图像插入Mathematica的SO帖子中更加方便 .
我们如何创建一个将光栅化其参数的函数 imgur[g_]
(确保最终大小不超过StackOverflow帖子的宽度),将其转换为PNG,将其上传到imgur,然后返回准备粘贴的MarkDown行等如 ![Mathematica graphic](http://i.imgur.com/ZENa4.jpg)
?
有用的参考:
-
Example of using POST request from Mathematica on WRI blog (posting to Twitter) by ragfield
-
Example of using POST requests from Mathematica on SO (uploading to ifile.it)
我没有调整后一种方法来上传图像而不先将其导出到文件中 .
Warning, use with care! StackOverflow使用separate imgur installation无限期保留图像 . 如果你使用主要的imgur,the images will disappear after 6 months if no one views them . 不幸的是,截至2011年11月,似乎有no official way以编程方式将图像上传到StackOverflow .
Update: See below直接上传到StackOverflow的解决方案 .
3 回答
一只小鸟刚刚告诉我这个问题的Mathematica解决方案(底层实现仍然使用JLink,但这个答案隐藏了所有与java相关的代码):
这仅是V8,
XML
导入选项"RequestMethod"
和"RequestParameters"
未记录和实验(因此可能会更改) .Note: 使用此功能here获取现成的调色板 .
Arnoud的解决方案让我兴奋和不耐烦,所以这里有一个改进 . 没有研究他的代码,我不可能做到这一点 . 这个版本似乎更可靠,更不容易出现超时错误,但老实说,我根本不懂Java,所以欢迎任何改进 .
最重要的是:这个版本直接上传到
stack.imgur.com
,所以在StackOverflow上使用它是安全的,不必担心上传的图像会在一段时间后消失 .我提供三个功能:
stackImage
上传表达式,导出为PNG,并返回URLstackMarkdown
返回markdown,准备复制stackCopyMarkdown
将降价复制到剪贴板下一步:创建一个调色板按钮,自动为笔记本中的选定图形执行此操作 . 对代码的改进非常受欢迎 .
Update:
这是一个按钮,显示选择的预览,并提供上传(或取消) . 它需要定义先前的功能 .
不幸的是我无法将按钮放在调色板(
CreatePalette
)中,因为调色板尺寸会影响光栅化 . 欢迎解决这个问题 .Update 2:
基于this question的答案,这是一个仅适用于Windows的调色板按钮:
警告:即使您在预览框中单击取消,它也会破坏剪贴板内容 .
注意:这是使用我的匿名密钥匿名imgur上传器 . imgur网站将上传限制为每小时上传50次,这应该是正常的,但如果很多人同时尝试这可能会导致问题 . 所以请在这里获取您自己的匿名密钥:
http://imgur.com/register/api_anon
然后用自己的密钥替换下面代码中的密钥(谢谢!) .
代码中最棘手的部分是从Mathematica表达式到PNG图像到Base64编码到URL编码的转换 . 大约有1000种方法可以做错,我想我设法尝试了所有这些方法 .
代码分为几个部分:
构造POST网址
Build HTTP连接
发送POST网址
回读结果,即XML
从XML中提取imgur url
将imgur url格式化为markdown(或作为Mathematica
Hyperlink
函数) .这是代码:
测试:
而实际形象: