package net.coobird.thumbnailator.tasks;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import net.coobird.thumbnailator.ThumbnailParameter;
import net.coobird.thumbnailator.tasks.io.InputStreamImageSource;
import net.coobird.thumbnailator.tasks.io.OutputStreamImageSink;
/**
* A thumbnail generation task which streams data from an {@link InputStream}
* to an {@link OutputStream}.
*
* This class does not close the {@link InputStream} and {@link OutputStream}
* upon the completion of processing.
*
* Only the first image obtained from the data stream will be read. Subsequent
* images will be ignored.
*
* @author coobird
*
*/
public class StreamThumbnailTask extends ThumbnailTask
{
/**
* The {@link SourceSinkThumbnailTask} used to perform the task.
*/
private final SourceSinkThumbnailTask task;
/**
* Creates a {@link ThumbnailTask} in which streamed image data from the
* specified {@link InputStream} is output to a specified
* {@link OutputStream}, using the parameters provided in the specified
* {@link ThumbnailParameter}.
*
* @param param The parameters to use to create the thumbnail.
* @param is The {@link InputStream} from which to obtain image data.
* @param os The {@link OutputStream} to send thumbnail data to.
* @throws NullPointerException If the parameter is {@code null}.
*/
public StreamThumbnailTask(ThumbnailParameter param, InputStream is, OutputStream os)
{
super(param);
this.task = new SourceSinkThumbnailTask(
param,
new InputStreamImageSource(is),
new OutputStreamImageSink(os)
);
}
@Override
public BufferedImage read() throws IOException
{
return task.read();
}
@Override
public void write(BufferedImage img) throws IOException
{
task.write(img);
}
@Override
public ThumbnailParameter getParam()
{
return task.getParam();
}
@Override
public InputStream getSource()
{
return task.getSource();
}
@Override
public OutputStream getDestination()
{
return task.getDestination();
}
}