11

我正在为一个家庭成员的婚礼做一个网站。他们要求的一个功能是一个照片部分,所有客人都可以在婚礼后去上传他们的照片。我说这是一个很棒的想法,然后我开始构建它。

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

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

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

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

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

编辑:与 SilverLight 相比,我更喜欢 Flash/Java 选项,不仅因为它目前的安装率较小,而且因为我在 Linux 上并且我想对其进行测试 =)

4

20 回答 20

4

我在画廊很幸运。它是免费的、开源的,并且具有您提到的所有功能。

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

于 2008-09-16T16:43:00.063 回答
4

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

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

于 2008-09-16T16:44:47.687 回答
4

最常见的解决方案是 java 小程序,尽管它们中的大多数都不是免费的。例子:

于 2008-09-27T23:05:29.970 回答
3

我用过很多次swfupload。非常棒:http ://www.swfupload.org/

于 2008-09-16T17:20:54.403 回答
2

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

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

支持上传图片。

上传需要身份验证。该库还包含一个基于 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/

希望有帮助...

迈克室

网格@adobe.com

于 2008-09-16T16:49:03.683 回答
2

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

看起来JUpload可能会为您执行此操作。

于 2008-09-16T17:19:33.563 回答
1

Picasa是一个非常棒/免费的照片管理应用程序。它可以让您进行一些令人印象深刻的编辑,并具有上传功能,但我不记得它是否会上传到任何地方,或者只是某些流行的网站(如 Flickr)。

于 2008-09-16T16:39:18.030 回答
1

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

我不知道您可以使用任何罐装上传程序,但制作一个应该不会太难(除非您不知道 Flash 或 Silverlight)。

于 2008-09-16T16:40:17.713 回答
1

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

于 2008-09-16T16:43:44.103 回答
1

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

于 2008-09-16T16:44:41.930 回答
1

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

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

只需设置一个 gmail/whatevermail 帐户并让您的网站轮询收件箱。

这类似于TwitPic为 twitter 所做的事情,但您的要求似乎比这更简单。

于 2008-09-16T16:48:24.420 回答
1

就个人而言,大多数用户不了解 DPI,而且他们的图像甚至被修剪后最终会比大多数托管公司允许的 php.ini 更大。

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

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

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

您还可以使用像 slideshowpro 的 director 应用程序这样的东西。

于 2008-09-16T16:52:25.487 回答
1

我完全同意 zigdon,允许不同的站点,但只从网络上获取照片。我仍然想允许上传,并限制大小。

现在,如果你想把自己投入到一些大事中,我建议限制大小,然后使用 JQuery(或其他库)来处理图像。

只是我的 2 美分

于 2008-09-16T17:02:26.460 回答
1

您也可以让他们通过电子邮件将图片发送到 picasa。Picasa 网络有一项功能,您可以将图像发送到“秘密”电子邮件,然后将它们发布到 picasa 帐户。设置一个 picasa 帐户,分发“秘密”电子邮件,然后等待所有图片显示出来。

于 2008-09-16T17:05:17.373 回答
1

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

如果您想更高级,我建议您使用snipshotpicknik(Flickr 使用它)。两者都可以免费使用,并且有 API 可供使用。

于 2008-09-17T00:15:22.863 回答
1

取决于网络服务器。如果您可以使用 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("<HEAD><TITLE>Upload Servlet</TITLE><HEAD>");
    pw.println("<BODY>");
}

public static void printTrailer(PrintWriter pw)  {
    pw.println("<img src=\"../images/poweredby.png\" align=left>");
    pw.println("<img src=\"../images/tomcat-power.gif\" align=right>");
    pw.println("</BODY></HTML>");
}


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()  {
}
}
于 2008-09-17T05:11:07.113 回答
1

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

我相信 Facebook.com 使用某种 java 小程序,它工作得很好,但我不确定该小程序是否可用作 OSS。我将研究 ScArcher2 建议的 JUpload。

如果您没有任何其他好的小程序,请继续提供。

于 2008-09-25T00:12:38.597 回答
1

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

我已经将它用于我的游戏开发团队,我们有超过 200 个概念艺术图像的原始转储,我们只需将 FileBrowser 提取到支持 PHP 的网络服务器并将图像转储到适当的目录(每个专辑 1 个),然后运行缩略图脚本。它处理图像的裁剪,并为您优化它们的大小。比使用 Menalto Gallery 之类的东西要好得多,您必须通过笨拙的上传界面上传它们。

于 2008-09-27T23:15:31.850 回答
1

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

于 2009-01-31T21:21:46.750 回答
-1

GIMP ( http://www.gimp.org/ ) 是一个很好的调整大小的工具并且是开源的。

于 2008-09-16T16:42:29.317 回答