1

我想让网站上的用户上传图片,并在上面写一些文字。此外,他们应该能够裁剪/缩放/移动图像和文本。对于那些东西,我可以在 jQuery 中完成。

在他们按照他们想要的方式制作图像之后,有没有办法我可以截取该图像的屏幕截图(使用 PiL)并将其保存在服务器上?

最好/正确的方法是什么?

4

4 回答 4

2

对图片进行“截图”既不是最好的,也不是正确的做法。要截屏,您需要在客户端机器上执行代码,这在网站场景中是“不可能的”。

看看lolcat builder(我现在想不出更严肃的例子;)。每次单击“预览”按钮时,图像 src 都会更新为包含文本、样式和位置的 url。该请求由服务器处理,该服务器将生成要显示的新图片。

于 2009-03-23T15:59:10.880 回答
1

我假设你在服务器端有 Python。

imo 最好的方法是以某种方式从客户端“获取”所有编辑参数,然后使用 PIL 重新渲染它。

更新:我将如何做 在服务器端,您需要一个 url 来处理帖子。在客户端,(每次编辑后,)使用编辑参数向该 url 发送一个帖子。我认为没有一个简单的解决方案。

也许如果您不使用 PIL 渲染最终图像,而只记住参数,则来自客户端的每个视图都可以自己渲染?

于 2009-03-23T15:58:28.807 回答
0

PIL 在客户端不可用.. 因此,除非正如 Jack Ha 建议的那样,您打算将图像编辑的所有指令上传到服务器并重新执行它们,否则它不是一个选项。我会回避这一点,因为您需要在客户端和服务器上实现相同的编辑例程,从而使代码库的大小增加一倍。(也许如果您的服务器端代码是用 Javascript 编写的,那将是有意义的,因此可以重用绘图代码。)

相反,请寻找一个 Javascript 库来完成客户端图像处理,并让浏览器上传最终的编辑图像。我不熟悉该区域的选项,但通过 Google 快速搜索发现了这一点,它使用 canvas 元素存储像素数据。

于 2009-03-23T16:55:34.113 回答
0

好吧,即使其他人试图阻止您这样做,也可能不会那么难。

在客户端,您定义一个在图像上浮动/可调整大小的 div,具有透明度,可以针对裁剪进行缩放。

移动,我假设它仅适用于文本,因此您可以在客户端动态创建可拖动的跨度,仍然很容易。

规模,我不知道一个简单的用户界面来做到这一点。

当你想更新你的图像时,你序列化你的数据(你的裁剪 div 的位置和你的文本跨度/缩放的位置,相对于图像的位置。)然后,使用 json 或任何你想要的类似的东西,你转移数据到服务器。

然后,在服务器上,使用 python/PIL 重现已序列化的转换。

于 2009-03-23T17:08:06.253 回答