Я делаю сайт для свадьбы члена семьи. Они просили создать раздел с фотографиями, куда все гости могли пойти после свадьбы и загрузить свои снимки. Я сказал, что это отличная идея, и пошел ее строить.
Есть только одна проблема: логистика. Скорость загрузки низкая, а фотографии с современных камер огромны (2-5 + мегабайт).
Мне понадобятся только изображения шириной ~ 800 пикселей, и некоторые из них могут потребовать поворота, поэтому в идеале я ищу возможность использовать редактор на стороне клиента, чтобы сделать три вещи:
И в мире моей мечты это было бы бесплатно и с открытым исходным кодом. Есть идеи?
Напоминаем: это то, чем должны пользоваться гости. Некоторые из них хорошо разбираются в компьютерах, а другие почти полностью неграмотны. Установка настольных приложений на самом деле не вариант. И я предполагаю, что у 98% из них установлены Flash и Java.
Обновлено: я бы предпочел вариант Flash / Java над SilverLight, не в последнюю очередь потому, что он имеет меньшую скорость установки на данный момент, но также потому, что я нахожусь в Linux, и я хотел бы его протестировать =)




Picasa - отличное / бесплатное приложение для управления фотографиями. Он позволяет вам выполнять довольно впечатляющее редактирование и имеет возможности загрузки, хотя я не могу вспомнить, будет ли он загружен куда-либо или только на определенные популярные сайты (например, Flickr).
Извините, я должен был пояснить. Это для гостей, а не для меня. Некоторые из этих людей не умеют работать с компьютером = (
О, вы хотите, чтобы это работало на веб-странице? За неимением лучшего слова, как апплет?
Picasa загружает только в сервис Google, picasaweb. Это по-прежнему полезно для редактирования фотографий, но вы все равно захотите иметь загрузчик, если хотите, чтобы он переходил на произвольный сайт.
Да, я ищу какой-нибудь апплет. Я пару раз редактировал основной пост, чтобы обрисовать это сейчас.
Просто скажите большими буквами «встроено в веб-страницу» :-p
Вы можете использовать Silverlight или Flash или какой-либо настраиваемый плагин, чтобы разрешить управляемую загрузку, где вы можете, например, отображать индикатор выполнения. Вы мало что можете сделать со скоростью загрузки, но вы можете хотя бы показать им прогресс, пока он идет.
Я не знаю каких-либо готовых программ загрузки, которые вы могли бы использовать, но сделать их не должно быть слишком сложно (если вы не знаете Flash или Silverlight).
GIMP (http://www.gimp.org/) - хороший инструмент для изменения размера и имеет открытый исходный код.
Действительно? Ваши предложения для людей, которые "почти полностью неграмотны", - это GIMP?
Мне повезло с Галерея. Он бесплатный, с открытым исходным кодом и имеет все упомянутые вами функции.
Это позволит вашим пользователям загружать фотографии без вашего вмешательства.
Как насчет использования Фотошоп онлайн? Он позволяет редактировать фотографии с помощью веб-редактора и предлагает 2 ГБ памяти. Я сам не использовал его, поэтому не знаю, позволяет ли он нескольким пользователям получить доступ к одной и той же учетной записи, хотя
Из любопытства, на каком веб-стеке это запускать? НАПОЛЬНАЯ ЛАМПА? 2k3 + IIS? и т.д. и т.п.? Многие решения с открытым исходным кодом являются кроссплатформенными, но другие нет ...
Другой вариант - разрешить людям загружать свои фотографии в любую службу, которую они используют (flickr, google, smugmug или любую другую), и просто принять имя пользователя для этой службы или URL-адрес папки.
Затем вы можете попросить ваше приложение захватить копию этих изображений для локального хранения с согласованным интерфейсом.
Думаю, это самое разумное решение. На сайтах фотохостинга уже есть инструменты для изменения размера и поворота фотографий, так зачем изобретать велосипед? У Flickr есть множество возможностей для получения данных через каналы: flickr.com/services/feeds
Доступен ли вариант Отправка фотографии по электронной почте?
Большинство людей, которые хотят поделиться фотографиями, вероятно, уже знают, как отправлять фотографии по электронной почте. И большинство почтовых клиентов уже решило проблемы с загрузкой файлов.
Просто настройте одну учетную запись Gmail / Anymail и пусть ваш сайт будет опрашивать почтовый ящик.
Это что-то вроде того, что TwitPic делает для твиттера, но ваши требования кажутся более простыми.
Если вы делаете это с помощью 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/
надеюсь, это поможет...
Майк Чемберс
Лично большинство пользователей не понимают DPI, и их изображения, даже обрезанные, в конечном итоге оказываются больше, чем позволяет php.ini для большинства хостинговых компаний.
Я не уверен, какой контроль вы хотите им дать или как вы хотите, чтобы публичная сторона вела себя.
Я бы предложил использовать FTP-приложение dropbox, такое как http://etonica.com/dropbox/index.html (tango dropbox). Это бесплатно для ваших клиентов, и вам нужно только заплатить за свою версию, чтобы вы могли настроить информацию FTP и защитить ее.
Я бы попросил их скачать что-нибудь по ссылке paint.net (что бесплатно), чтобы они отредактировали фотографии до нужного размера, а затем просто перетащили их в это приложение. это просто и не требует изменения php.ini.
Вы также можете использовать что-то вроде приложения-директора слайд-шоу.
Я полностью согласен с zigdon, разрешаю разные сайты, но только беру фотографии из Интернета. Если вы все еще хотите разрешить загрузку и ограничить размер.
Теперь, если вы хотите заняться чем-то большим, я бы предложил ограничить размер, а затем использовать JQuery (или другую библиотеку) для работы с изображениями.
Только мои 2 цента
Вы также можете отправить их по электронной почте в Picasa. В сети Picasa есть функция, с помощью которой вы можете отправлять изображения на «секретный» адрес электронной почты, который отправляет их в учетную запись Picasa. Создайте учетную запись Picasa, разошлите «секретное» электронное письмо и дождитесь появления всех изображений.
Я бы использовал апплет. Вы можете изменять размер изображений и вращать их на стороне клиента.
Похоже, Загрузить может сделать это за вас.
Я довольно часто использовал swfupload. Это довольно круто: http://www.swfupload.org/
О, слава богу, чувак, это именно то, что я искал в проекте, над которым я сейчас работаю. Ты спаситель !!! Спасибо.
Зависит от веб-сервера. Если вы можете использовать сервлеты, попробуйте следующее:
// 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() {
}
}
В настоящее время от меня требуется выполнение того же требования, что и от Оли.
Я считаю, что Facebook.com использует какой-то java-апплет, и он работает очень хорошо, но я не уверен, доступен ли апплет как OSS. Я собираюсь изучить JUpload, предложенный ScArcher2.
Если у вас нет других хороших апплетов, пожалуйста, продолжайте.
Наиболее распространенным решением для этого является java-апплет, хотя большинство из них не бесплатны. Примеры:
У меня желание JumpLoader работал на Linux. Есть ошибка (о которой я сейчас сообщил), когда он не загружается в IcedTea / OpenJDK.
Вчера я отправил электронное письмо создателю JumpLoader, сегодня получил быстрый обмен сообщениями MSN, а через несколько минут появилась версия, совместимая с OpenJDK. МАГИЯ !! JumpLoader намного лучше, чем множество решений стоимостью более 50 долларов и бесплатен (с довольно свободными ограничениями).
Я тоже использую JumpLoader, это отличный продукт. Поддержка тоже отличная, они не только очень быстро отвечают, но и исправляют ошибки за считанные минуты.
Я бы высоко предложил использовать FileBrowser от Lussomo. Это так же просто, как перетаскивание: D
Я использовал его для своей команды разработчиков игр, где у нас был необработанный дамп из более чем 200 изображений концепт-арта, и мы просто извлекли FileBrowser на веб-сервер с поддержкой PHP, скопировали изображения в соответствующие каталоги (по одному на альбом) и запустили сценарий миниатюр. Он обрабатывает кадрирование изображений и оптимизирует их размер для вас. Намного лучше, чем использовать что-то вроде Menalto Gallery, где вам нужно загружать их через неудобный интерфейс загрузки.
Вы можете использовать лунный свет для тестирования своего приложения.