Jpeg

Модератор: Absurd

Ответить
warmbabe
Сообщения: 4
Зарегистрирован: 02 июл 2007, 11:34

Привет! У меня очень мало опыта программирования на java. Если у вас есть какие-нибудь идеи, поделитесь пожалуйста)
Мне нужно написать программу, которая по ссылке загружает файл- картинку формата jpeg, "вытаскивает" из самого файла уменьшенную копию картинки и сохраняет исходный файл и отдельно уменьшенную копию на диск. Т.е., само изображение уменьшать не нужно, нужно сделать из одного файла два.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

warmbabe, а в чём заключается вопрос?

1. скачиваешь файл (java.net.URLConnection)
2. создаёшь превью (java.awt.image.BufferedImage; java.awt.geom.AffineTransform)
3. сохраняешь на диске (java.io.FileWriter)
warmbabe
Сообщения: 4
Зарегистрирован: 02 июл 2007, 11:34

Вопрос в том, как создать это превью. А точнее, не создать, а вытащить...
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

warmbabe, термин "вытащить" мне не понятен.

Превью сохранено в том же файле, что и сама картинка?
Не знал, что JPEG формат такое позволяет.
warmbabe
Сообщения: 4
Зарегистрирован: 02 июл 2007, 11:34

Да, позволяет. Там может быть и больше одной уменьшенной копии. Но может и не быть копий вообще. Это зависит от программы, с помощью которой эта картинка была создана. Я нашла класс ImageReader, там есть такая возможность http://java.sun.com/j2se/1.4.2/docs/gui ... s.fm3.html , но я не могу разобраться, как описать объект этого класса и поток ввода для него, который я сделала из URL
(URL adr = new URL(address);
BufferedReader br = new BufferedReader(new InputStreamReader(adr.openStream())); )
warmbabe
Сообщения: 4
Зарегистрирован: 02 июл 2007, 11:34

Я пытаюсь написать так

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,true);
...

Но выдается ошибка - ImageInputStream cannot be resolved to a typе
:confused:
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

warmbabe, import вставь
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

[syntax="java"]import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.util.Iterator;

import javax.imageio.*;
import javax.imageio.stream.*;

public class ImageThumbnail {

public static void main(String[] args) {

try{

String urlAdress = "url";

int imageIndex = 0;
int thumbnailIndex = 0;

String fileName = "file";

URL url = new URL(urlAdress);
InputStream inputStream = url.openStream();
ImageInputStream imageInputStream = ImageIO.createImageInputStream(inputStream);
Iterator readers = ImageIO.getImageReaders(imageInputStream);
ImageReader reader = (ImageReader)readers.next();
reader.setInput(imageInputStream, true);

BufferedImage image = reader.readThumbnail(imageIndex, thumbnailIndex);

OutputStream outputStream = new FileOutputStream(fileName);
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(outputStream);
Iterator writers = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = (ImageWriter)writers.next();
writer.setOutput(imageOutputStream);
writer.write(image);
} catch (Exception e) {
e.printStackTrace();
}
}
}
[/syntax]

не проверял
возможно ещё надо потоки закрыть или output.flush()
Ответить