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

时间:2020-03-05 18:56:29  来源:igfitidea点击:

我正在做一个家庭成员婚礼的网站。他们要求提供的一个功能是照片区,所有宾客都可以在婚礼后去那里并上传他们的快照。我说这是一个很棒的主意,所以我去建立它。

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

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

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

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

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

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

解决方案

回答

Picasa是一款非常出色/免费的照片管理应用程序。它使我们进行一些令人印象深刻的编辑,并具有上传功能,尽管我不记得它是否可以上传到任何地方,或者仅上传到某些受欢迎的网站(如Flickr)。

回答

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

我不知道我们可以使用任何预设的上传程序,但是制作一个应该不难(除非我们不知道Flash或者Silverlight)。

回答

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

回答

我在Gallery祝你好运。它是免费的开放源代码,并具有我们提到的所有功能。

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

回答

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

回答

出于好奇,这要在哪个Web堆栈上运行?灯? 2k3 + IIS?等等等等?那里的许多开源解决方案都是跨平台的,但其他解决方案则不是。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

回答

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

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

回答

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

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

只需设置一个gmail / whatevermail帐户,然后让网站轮询收件箱即可。

就像TwitPic对Twitter所做的一样,但要求似乎比这更简单。

回答

如果使用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 feed或者API加载到用户站点上:

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

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

希望有帮助...

迈克·钱伯斯

[email protected]

回答

个人而言,大多数用户不了解DPI,其图像甚至被修剪后最终超出了大多数托管公司允许的php.ini。

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

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

我希望他们下载一些链接paint.net(免费),让他们将照片编辑为适当的大小,然后将其拖放到此应用程序中。这很容易,不需要修改php.ini。

我们还可以使用诸如slideshowpro的Director应用程序之类的东西。

回答

我完全同意zigdon,允许使用其他网站,但只能从网络上获取照片。我仍然要允许上传,并限制其大小。

现在,如果我们想投入大量精力,我建议设置大小上限,然后使用JQuery(或者其他库)处理图像。

就是我的2美分

回答

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

回答

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

看起来JUpload可以为我们做到这一点。

回答

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

回答

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

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

回答

取决于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("<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()  {
}
}

回答

目前,我需要执行与Oli类似的要求。

我相信Facebook.com使用某种Java小程序,并且运行良好,但是我不确定小程序是否可以作为OSS使用。我将研究ScArcher2建议的JUpload。

如果我们没有其他任何好用的applet,请继续进行下去。

回答

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

  • http://www.jumploader.com/
  • http://www.aurigma.com/Products/ImageUploader/OnlineDemo.aspx
  • http://www.javaatwork.com/java-upload-applet/details.html
  • JUPload,ScArcher2提到

回答

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

我曾在游戏开发团队中使用过它,其中有200多个概念艺术图像的原始转储,我们只是将FileBrowser提取到支持PHP的网络服务器中,并将图像转储到适当的目录中(每张专辑1个),缩略图脚本。它可以处理图像并为我们优化图像的大小。比使用诸如Menalto Gallery之类的东西要好得多,在这种情况下,我们必须通过笨拙的上传界面来上传它们。

回答

试试看
http://www.lunarvis.com/products/tinymcefilebrowserwithupload.php