Каков наилучший способ обработки фотографий?

Я делаю сайт для свадьбы членов семьи. Функция, которую они запросили, была разделом фотографии, где все гости могли пойти после свадьбы и загрузить свои снимки. Я сказал, что это была звездная идея, и я отправился ее строить.

Ну, только одна проблема: логистика. Скорость загрузки медленная, а фотографии с современных камер огромны (2-5 + Megs).

Мне понадобятся только изображения шириной 800 пикселей и некоторые из них могут потребовать вращения таким образом, что я ищу, используя редактор на стороне клиента, чтобы сделать три вещи:

  • Позвольте пользователям выбрать несколько файлов
  • Позвольте им повернуть некоторые изображения, чтобы они были правильными.
  • Измените их размер, а затем загрузите

И в мире моей мечты это было бы бесплатным и открытым исходным кодом. Любые идеи?

Просто напоминание: это то, что гости должны использовать. Некоторые из них будут достаточно компьютерными, но другие будут почти полностью неграмотными. Установка настольных приложений на самом деле не является вариантом. И я предполагаю, что у 98% из них установлены Flash и Java.

Изменить: я предпочел бы вариант Flash/Java над SilverLight, не в последнюю очередь потому, что он имеет меньшую скорость установки на данный момент, но также потому, что я нахожусь в Linux, и я бы хотел протестировать его =)

Ответ 2

Мне повезло с Gallery. Он бесплатный, с открытым исходным кодом и имеет все функции, о которых вы говорили.

Это позволит пользователям загружать фотографии без каких-либо вмешательств.

Ответ 3

Другой вариант может состоять в том, чтобы позволить людям загружать свои фотографии в любую службу, к которой они привыкли использовать (flickr, google, smugmug или любой другой), и просто принять имя пользователя для этой службы или URL для этой папки,

Затем вы можете заставить ваше приложение захватить копию этих изображений для локального хранения с помощью согласованного интерфейса.

Ответ 4

Я использовал swfupload совсем немного. Это довольно удивительно: http://www.swfupload.org/

Ответ 5

Если вы делаете это со 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), а затем загрузиться на сайт пользователей, используя либо RSS-каналы Flickr, либо API:

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

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

надеюсь, что это поможет...

микрофонные камеры

[email protected]

Ответ 6

Я бы использовал апплет. Вы можете сделать изменение размеров изображений и вращаться на стороне клиента.

Похоже, JUpload может сделать это для вас.

Ответ 7

Picasa - это довольно простое/бесплатное приложение для управления фотографиями. Это позволяет вам делать довольно впечатляющее редактирование и имеет возможности загрузки, хотя я не могу вспомнить, будет ли он загружаться в любую точку или только некоторые популярные сайты (например, Flickr).

Ответ 8

Вы можете использовать Silverlight или Flash или какой-либо пользовательский плагин для управления управляемыми загрузками, где вы можете отображать индикатор выполнения, например. Существует не так много, что вы можете сделать о скорости загрузки, но вы можете хотя бы показать им прогресс, пока он продолжается.

Я не знаю никаких программ для консервированных загрузок, которые вы можете использовать, но это не должно быть слишком сложно сделать (если вы не знаете Flash или Silverlight).

Ответ 9

Как насчет использования PhotoShop Online Он позволяет редактировать фотографии с помощью веб-редактора и предлагает 2 ГБ хранилища. Я не использовал его сам, поэтому не знаю, разрешает ли он нескольким пользователям получать доступ к одной и той же учетной записи, хотя

Ответ 10

Из любопытства, какой веб-стек нужно запустить? ЛАМПА? 2k3 + IIS? и т.д.? Многие из решений с открытым исходным кодом есть кросс-платформенные, но другие не...

Ответ 11

Является ли электронной рассылкой фотографии в доступной опцией?

Большинство людей, которые хотят обмениваться фотографиями, уже знают, как отправлять фотографии по электронной почте. И большинство почтовых клиентов уже решили проблемы с загрузкой файлов.

Просто настройте одну учетную запись gmail/anymail и проверите свой веб-сайт в папке "Входящие".

Это что-то вроде TwitPic для твиттера, но ваши требования кажутся более упрощенными.

Ответ 12

Лично большинство пользователей не понимают DPI, и их изображения даже обрезаются в конечном итоге больше, чем php.ini для большинства хостинговых компаний.

Я не уверен, какой контроль вы хотите дать им или как вы хотите, чтобы общественная сторона вела себя.

Я бы предложил использовать приложение FTP с Dropbox, например http://etonica.com/dropbox/index.html (tango dropbox). Это бесплатно для ваших клиентов, и у вас есть только для оплаты вашей версии, чтобы вы могли настроить информацию о FTP и защитить ее.

Я бы попросил их загрузить что-то ссылку paint.net(что БЕСПЛАТНО), чтобы они отредактировали фотографии до нужного размера, а затем просто перетащили их в это приложение. это легко и не требует изменения php.ini.

Вы также можете использовать что-то вроде приложения-разработчика slideshowpro.

Ответ 13

Я полностью согласен с zigdon, разрешаю разные сайты, но только собираю фотографии из Интернета. Я все же хочу разрешить загрузку и установить ограничение по размеру.

Теперь, если вы хотите бросить себя во что-то большое, я бы предложил установить ограничение на размер, а затем использовать JQuery (или другую библиотеку) для работы с изображениями.

Только мои 2 цента

Ответ 14

Вы также можете отправить их по электронной почте на picasa. Веб-сайт Picasa имеет функцию, в которой вы можете отправлять изображения в "секретный" адрес электронной почты, который отправит их на учетную запись picasa. Настройте учетную запись picasa, распределите "секретную" электронную почту и дождитесь появления всех изображений.

Ответ 15

Переход на маршрут Flickr прост и будет хорошо работать.

Если вы хотите перейти более продвинутым, я бы рекомендовал snipshot или picknik (использует Flickr). Оба могут свободно использовать и использовать API.

Ответ 16

Зависит от веб-сервера. Если вы можете использовать сервлеты, попробуйте следующее:

// 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()  {
}
}

Ответ 17

В настоящее время мне необходимо выполнить аналогичное требование, как Oli.

Я считаю, что Facebook.com использует java-апплет какого-то типа, и он работает очень хорошо, но я не уверен, доступен ли апплет как OSS. Я собираюсь изучить JUpload, предложенный ScArcher2.

Если у вас нет другого хорошего апплета, пожалуйста, продолжайте его.

Ответ 18

Я бы предложил высоко использовать FileBrowser от Lussomo. Это так же просто, как "перетаскивание": D

Я использовал его для своей команды разработчиков игр, где у нас была сырая дамп более 200 изображений концептуального искусства, и мы просто извлекли FileBrowser на веб-сервер с поддержкой PHP и сбросили изображения в соответствующие каталоги (по 1 на альбом), и выполнил миниатюру script. Он обрабатывает обрезку изображений и оптимизирует их размер для вас. Настолько лучше, чем использовать что-то вроде Menalto Gallery, где вы должны загружать их через неудобный интерфейс загрузки.

Ответ 20

GIMP (http://www.gimp.org/) является хорошим инструментом для изменения размера и является открытым исходным кодом.