Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jpeg, нужна помощь... 
V
    Опции темы
Warmbaby
Дата 2.7.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



Привет! У меня очень мало опыта программирования на java. Если у вас есть какие-нибудь идеи, поделитесь пожалуйста)
Мне нужно написать программу, которая по ссылке загружает файл- картинку формата jpeg, "вытаскивает" из самого файла уменьшенную копию картинки и сохраняет исходный файл и отдельно уменьшенную копию на диск. Т.е., само изображение уменьшать не нужно, нужно сделать из одного файла два.

PM MAIL   Вверх
batigoal
Дата 2.7.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



А в чем, конкретно, проблема? Все эти элементы по отдельности на форуме уже не раз обсуждались, поищи (чтение картинки, ресайз, сохранение в файл).


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Warmbaby
Дата 2.7.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) Warmbaby - 2.7.2007, 12:08
PM MAIL   Вверх
Warmbaby
Дата 2.7.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



Вот что я нашла о jpeg-файлах, но полностью разобраться сама не могу.... smile 

http://wap.netghost.ru/gff/graphics/summary/jfif_ru.html
http://vbzero.narod.ru/chapter3/article_4.htm 
http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format 

Это сообщение отредактировал(а) Warmbaby - 2.7.2007, 13:12
PM MAIL   Вверх
_Y_
Дата 2.7.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(Warmbaby @ 2.7.2007,  13:06)
Вот что я нашла о jpeg-файлах

IMHO Вы не туда копаете. Совершенно не нужно разбираться в формате JPG. Надо просто найти уже готовый Java класс (или несколько), обладающий нужной Вам функциональностью и его использовать. Задача-то у Вас, похоже, стандартная до безобразия. Я вот навскидку нашел такое:
http://mindprod.com/jgloss/jpegencoder.html  и такое http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/Image.htm
да и вообще начал бы с того, что посмотрел стандартные классы, наследующие от Image


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Maksym
Дата 2.7.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Warmbaby
List of Java libraries to read and write pixel image files -- полно реализаций по работе с основными растровыми форматами, в том числе и jpg. Выберите что-нибудь фришное и при этом достаточно популярное и пользуйтесь на здоровье. Как правильно заметил _Y_, чтобы проделать описанную операцию ничего про формат знать не нужно.
PM MAIL   Вверх
v2v
Дата 2.7.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Warmbaby, а какая разница в этот же файл сохранять или другой, вот когда то писал функцию, вроде работает нормально ...
Код

  public static boolean TransformImage(String inFile, String outFile, int NewWidth, int NewHeigth)
    {
        try
        {
                 BufferedImage inImage = ImageIO.read(new File(inFile));
            double dx = (double)NewWidth / (double)inImage.getWidth();
            double dy = (double)NewHeigth / (double)inImage.getHeight();
            BufferedImage outImage = new BufferedImage(NewWidth,NewHeigth, BufferedImage.TYPE_INT_RGB);
            AffineTransform scale = AffineTransform.getScaleInstance(dx, dy);
            Graphics2D g2 = (Graphics2D) outImage.getGraphics();
            g2.drawImage(inImage, scale, null);
            ImageIO.write(outImage, "JPG", new File(outFile));
            return true;
        }
        catch(Exception e)
        {
            e.printStackTrace();    
            return false;
        }    
    }



Добавлено @ 19:13
зы. Если тебе надо изменять область рисунка и ты точно знаешь с какой по какую точки прямоугольник тебе надо выбирать... смотри в сторону Graphics2D .

Это сообщение отредактировал(а) v2v - 2.7.2007, 19:13


--------------------
PM   Вверх
Warmbaby
Дата 3.7.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



Спасибо за ответы smile 
Я вот нашла кое-что http://java.sun.com/j2se/1.4.2/docs/guide/...fm3.html#998353 - попробую так.
PM MAIL   Вверх
Warmbaby
  Дата 5.7.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



Мне нужно использовать ImageReader. Я пишу так
try{
URL adr = new URL(address);
InputStream is = adr.openStream();
ImageInputStream iis = ImageIO.createImageInputStream(is);
Iterator readers = ImageIO.getImageReaders(iis);
ImageReader reader = (ImageReader).readers.next();
reader.setInput(iis,false);
...

Но выдается ошибка - ImageInputStream cannot be resolved to a typе

 smile 


Это сообщение отредактировал(а) Warmbaby - 5.7.2007, 10:32
PM MAIL   Вверх
kkorsakoff
Дата 5.7.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 14



Похоже вы легких путей не ищетеsmile
Почему нельзя вместо всего этого испольовать

Код

URL adr=new URL(address);
BufferedImage img=ImageIO.read(adr);

PM MAIL WWW ICQ   Вверх
Warmbaby
Дата 5.7.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



Но после этого как мне использовать класс ImageReader? Как описать поток ввода??
PM MAIL   Вверх
kkorsakoff
Дата 5.7.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 14



А зачем? Вам же надо прочитать изображение и потом его уменьшить.

Пример то привели выше v2v.

А если вы хотите считать Thumbnail как по ссылке, которую привели вы, так ничего у вас не получится:(
JPEG не их тех форматов, которые могут хранить в себе уменьшенные копии основного изобюражение
PM MAIL WWW ICQ   Вверх
Warmbaby
Дата 5.7.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



Мне нужно именно прочитать Thumbnail, и JPEG может содержать в себе уменьшенную копию, а иногда и не одну. Если картинку создавали\изменяли в photoshop или acdsee, например, то там обязательно есть Thumbnail (это я проверяла). Не могу понять из-за чего ошибка  smile 
PM MAIL   Вверх
kkorsakoff
Дата 5.7.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 14



Простите, не знал

http://en.wikipedia.org/wiki/JFIF

А чем вы сохранете файлы, что они с тумбами сохраняются?
Можно мне прислать такой поковыряться?smile
PM MAIL WWW ICQ   Вверх
AlexeyVorotnikov
Дата 5.7.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Цитата(Warmbaby @  5.7.2007,  10:26 Найти цитируемый пост)
Но выдается ошибка - ImageInputStream cannot be resolved to a typе


А у Вас в начале программы стоит
Код

import javax.imageio.stream.ImageInputStream

?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Warmbaby
Дата 5.7.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



У меня в начале программы
Код

    import javax.imageio.*;

PM MAIL   Вверх
AlexeyVorotnikov
Дата 5.7.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Цитата(Warmbaby @ 5.7.2007,  13:47)
У меня в начале программы
Код

    import javax.imageio.*;

Обратите внимание, ImageInputStream находится в подпакете stream пакета javax.imageio. Он требует отдельного импорта.
Код

    import javax.imageio.*;

импортирует только классы расположенные непосредственно в пакете javax.imageio. Классы из подпакетов не импортируются.

Это сообщение отредактировал(а) AlexeyVorotnikov - 5.7.2007, 13:56


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Warmbaby
Дата 5.7.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



В самом деле! Спасибо огромное))))
PM MAIL   Вверх
kkorsakoff
Дата 5.7.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 14



Странная штука. Похоже стандартный ридер JPEG-формата не понимает тумбы.

Вот метадата изображения, которое мне прислала Warmbaby

Код

<javax_imageio_jpeg_image_1.0>
  <JPEGvariety>
    <app0JFIF majorVersion="1" minorVersion="2" resUnits="1" Xdensity="300" Ydensity="300" thumbWidth="0" thumbHeight="0"/>
  </JPEGvariety>
  <markerSequence>
    <unknown MarkerTag="237"/>
    <app14Adobe version="100" flags0="32768" flags1="0" transform="1"/>
    <dqt>
      <dqtable elementPrecision="0" qtableId="0"/>
      <dqtable elementPrecision="0" qtableId="1"/>
    </dqt>
    <sof process="0" samplePrecision="8" numLines="600" samplesPerLine="800" numFrameComponents="3">
      <componentSpec componentId="1" HsamplingFactor="2" VsamplingFactor="2" QtableSelector="0"/>
      <componentSpec componentId="2" HsamplingFactor="1" VsamplingFactor="1" QtableSelector="1"/>
      <componentSpec componentId="3" HsamplingFactor="1" VsamplingFactor="1" QtableSelector="1"/>
    </sof>
    <dri interval="50"/>
    <dht>
      <dhtable class="0" htableId="0"/>
      <dhtable class="0" htableId="1"/>
      <dhtable class="1" htableId="0"/>
      <dhtable class="1" htableId="1"/>
    </dht>
    <sos numScanComponents="3" startSpectralSelection="0" endSpectralSelection="63" approxHigh="0" approxLow="0">
      <scanComponentSpec componentSelector="1" dcHuffTable="0" acHuffTable="0"/>
      <scanComponentSpec componentSelector="2" dcHuffTable="1" acHuffTable="1"/>
      <scanComponentSpec componentSelector="3" dcHuffTable="1" acHuffTable="1"/>
    </sos>
  </markerSequence>
</javax_imageio_jpeg_image_1.0>



Намека на тумбы тут нет.

Так же метод reader.getNumThumbnails(0) возвращает 0,
хотя reader.readerSupportsThumbnails() возвращает true

Надо поискать в нете еще...
PM MAIL WWW ICQ   Вверх
kkorsakoff
Дата 5.7.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 14



Все понятно, в JPEG'e тумбнэйл хранится в EXIF'e. Можно найти библиотеки чтения EXIF'a, но ни одна из них не вынимает тумбнэйл.
Правда была еще одна платная, наверно все-таки вынимает, не смотрелsmile

Так что проще всего будет читать изображение и сжимать его как привели в примере вверху темы.
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.