处理照片上传的最佳方式是什么?

我正在为一个家庭成员的婚礼做一个网站。 他们要求的一个function是一个照片部分,所有的客人可以在婚礼后去上传他们的快照。 我说这是一个很棒的主意,我去建造它。

那么只有一个问题:物流。 上传速度很慢,现代相机的照片很大(2-5 + Megs)。

我只需要~800px宽的图像,其中一些可能需要旋转,所以理想情况下我正在寻找使用客户端编辑器做三件事:

  1. 让用户选择多个文件
  2. 让他们旋转一些图像,使它们正确向上
  3. resize然后上传

在我的梦想世界中,它是免费的和开源的。 有任何想法吗?

提醒一下:这是客人必须使用的东西。 他们中的一些人会非常精通计算机,但其他人几乎完全是文盲。 安装桌面应用程序不是一个真正的选择。 我假设其中98%安装了Flash和Java。

编辑:我更喜欢SilverLight上的Flash / Java选项,不仅仅是因为它目前的安装率较低,而且因为我在Linux上并且我想测试它=)

最常见的解决方案是java applet,尽管其中大多数都不是免费的。 例子:

我和Gallery好运。 它是免费的,开源的,并具有您提到的所有function。

它允许您的用户上传照片而无需您的任何干预。

另一种选择可能是允许人们将他们的照片上传到他们习惯使用的任何服务(flickr,google,smugmug或任何其他服务),并且只接受该服务的用户名或文件夹的URL。

然后,您可以让应用程序获取这些图片的副本,以便使用一致的界面在本地存储。

我已经使用了很多swfupload。 它非常棒: http : //www.swfupload.org/

如果您使用Flash并使用Flickr执行此操作,那么我将查看AS3 Flickr库:

http://code.google.com/p/as3flickrlib/

它支持上传图像。

上传需要身份validation 该库还包含一个基于Flex的控件,用于处理:

http://www.mikechambers.com/blog/2008/08/12/flex-based-flickr-api-authorization-control/

(库的其余部分是ActionScript 3,可以在Flex或Flash中使用。

可能最简单的解决方案是将图像上传到Flickr,在Picnik中编辑(现在内置到Flickr中),然后使用Flickr RSS源或API加载到用户站点:

http://www.flickr.com/help/picnik/

http://www.flickr.com/services/api/

希望有帮助……

迈克室

mesh@adobe.com

我会用一个小程序。 您可以调整图片大小并在客户端旋转。

看起来JUpload可能会为你做这件事。

Picasa是一个非常好/免费的照片管理应用程序。 它让你做一些非常令人印象深刻的编辑,并具有上传function,但我不记得它是否会上传到任何地方,或只是某些热门网站(如Flickr)。

您可以使用Silverlight或Flash或某些自定义插件来允许托管上传,例如,您可以在其中显示进度条。 关于上传速度你无能为力,但你至少可以在进行中显示进度。

我不知道你可以使用任何jar装上传程序,但它不应该太难(除非你不知道Flash或Silverlight)。

如何使用PhotoShop Online它允许您使用基于Web的编辑器编辑照片,并提供2GB的存储空间。 我自己没有使用它,所以不知道它是否允许多个用户访问同一个帐户

出于好奇,这是什么网络堆栈运行? 灯? 2K3 + IIS? 等等? 许多开源解决方案都是跨平台的,但其他解决方案不是……

是否通过电子邮件发送照片

大多数想要分享照片的人可能已经知道如何通过电子邮件发送照片。 大多数电子邮件客户端已经解决了文件上传的问题。

只需设置一个gmail / whatevermail帐户,让您的网站在收件箱中进行投票。

这就像TwitPic为twitter做的那样,但你的要求似乎比这更简单。

个人大多数用户不理解DPI,他们的图像甚至被削减,最终比大多数托管公司允许的php.ini大。

我不确定你想给他们多少控制权,或者你希望公众方面如何行事。

我建议使用Dropbox FTP应用程序,如http://etonica.com/dropbox/index.html (探戈保管箱)它对您的客户是免费的,您只需支付您的版本,以便您可以设置FTP信息并保护它。

我有他们下载的东西链接paint.net(这是免费的)让他们编辑照片到适当的大小,然后只需将它们拖放到这个应用程序。 它很简单,不需要修改php.ini。

你也可以使用像slideshowpro的导演应用程序这样的东西。

我完全赞同zigdon,允许不同的网站,但只从网上拿起照片。 我仍然希望允许上传,并设置上限。

现在,如果你想把自己扔进一个大的东西,我会建议对大小设置上限,然后使用JQuery(或其他库)来处理图像。

只需2美分

您也可以让他们通过电子邮件将照片发送到picasa。 Picasa网络具有以下function:您可以将图像发送到“秘密”电子邮件,然后将其发布到Picasa帐户。 设置一个picasa帐户,分发“秘密”电子邮件,并等待所有图片显示。

走Flickr路线很容易,效果很好。

如果你想更高级,我建议使用snipshot或picknik (Flickr使用它)。 两者都可以免费使用并且可以使用API​​。

我目前需要实施与Oli类似的要求。

我相信Facebook.com使用某种类型的Java applet,它运行得很好,但我不确定applet是否可用作OSS。 我将研究ScArcher2建议的JUpload。

如果你没有其他任何好的小程序,请保持它的到来。

强烈建议使用Lussomo的FileBrowser 。 它就像’拖放’一样简单:D

我已经将它用于我的游戏开发团队,在那里我们有超过200个概念艺术图像的原始转储,我们只是将FileBrowser提取到支持PHP的Web服务器并将图像转储到适当的目录中(每个专辑1个),然后运行缩略图。 它可以处理图像的裁剪,并为您优化尺寸。 比使用像Menalto Gallery这样的东西要好得多,你必须通过一个笨拙的上传界面上传它们。

试试这个http://www.lunarvis.com/products/tinymcefilebrowserwithupload.php

取决于Web服务器。 如果您可以使用servlet,请尝试以下方法:

// UploadServlet.java : Proof of Concept - Mike Smith March 2006 // Accept a file from the client, assume it is an image, rescale it and save it to disk for later display import javax.servlet.http.*; import javax.imageio.*; import java.io.*; import java.util.*; import java.sql.*; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.*; import org.apache.commons.fileupload.servlet.*; import java.awt.image.*; import java.awt.*; public class UploadServlet extends HttpServlet { public static void printHeader(PrintWriter pw) { pw.println("Upload Servlet"); pw.println(""); } public static void printTrailer(PrintWriter pw) { pw.println(""); pw.println(""); pw.println(""); } public void init() { // Servlet init() : called when the servlet is LOADED (not when invoked) } public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { DiskFileItemFactory dfifact; ServletFileUpload sfu; java.util.List items; Iterator it; FileItem fi; String field, filename, contype; boolean inmem, ismulti; long sz; BufferedImage img; int width, height, nwidth, nheight, pixels; double scaling; final int MAXPIXELS = 350 * 350; res.setContentType("text/html"); PrintWriter pw = res.getWriter(); printHeader(pw); ismulti = FileUpload.isMultipartContent(req); if (ismulti) { pw.println("Great! Multipart detected"); dfifact = new DiskFileItemFactory(999999, new File("/tmp")); sfu = new ServletFileUpload(dfifact); try { items = sfu.parseRequest(req); } catch (FileUploadException e) { pw.println("Failed to parse file, error [" + e + "]"); printTrailer(pw); pw.close(); return; } it = items.iterator(); while (it.hasNext()) { fi = (FileItem) it.next(); if (fi.isFormField()) { pw.println("Form field [" + fi.getFieldName() + "] value [" + fi.getString() + "]"); } else { // Its an upload field = fi.getFieldName(); filename = fi.getName(); contype = fi.getContentType(); inmem = fi.isInMemory(); sz = fi.getSize(); pw.println("Upload field=" + field + " file=" + filename + " content=" + contype + " inmem=" + inmem + " size=" + sz); InputStream istream = fi.getInputStream(); img = ImageIO.read(istream); nwidth = width = img.getWidth(); nheight = height = img.getHeight(); pixels = width * height; if (pixels > MAXPIXELS) { scaling = Math.sqrt((double) MAXPIXELS / (double) pixels); nheight = (int) ((double) height * scaling); nwidth = (int) ((double) width * scaling); } BufferedImage output = new BufferedImage(nwidth, nheight, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = output.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage(img, 0, 0, nwidth, nheight, null); ImageIO.write(output, "jpeg", new File("/var/tomcat/webapps/pioneer/demo.jpg")); istream.close(); } } } else pw.println("Bugger! Multipart not detected"); printTrailer(pw); pw.close(); } public void destroy() { } } 

GIMP( http://www.gimp.org/ )是一个很好的resize的工具,是开源的。