使用Thumbnailator工具需要引入thumbnailator-0.4.8.jar包,在pom中添加一下代碼即可。
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
圖檔壓縮
1、建立ImageZoomService接口,添加一下代碼。
import java.io.File;
import java.io.OutputStream;
import java.net.URL;
/*
* 圖檔縮放
* */
public interface ImageZoomService {
/**
* 指定大小進行縮放 若圖檔橫比width小,高比height小,不變 若圖檔橫比width小,高比height大,高縮小到height,圖檔比例不變
* 若圖檔橫比width大,高比height小,橫縮小到width,圖檔比例不變
* 若圖檔橫比width大,高比height大,圖檔按比例縮小,橫為width或高為height
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param width
* 寬
* @param height
* 高
*/
public void imgThumb(String source, String output, int width, int height);
public void imgThumb(File source, String output, int width, int height);
public void imgThumb(URL source, String output, int width, int height);
public String imgThumbOutputStream(URL source, int width, int height);
/**
* 按照比例進行縮放
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param scale
* 比例
*/
public void imgScale(String source, String output, double scale);
public void imgScale(File source, String output, double scale);
public void imgScale(URL source, String output, double scale);
public String imgScaleOutputStream(URL source, double scale);
/**
* 不按照比例,指定大小進行縮放
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param width
* 寬
* @param height
* 高
* @param keepAspectRatio
* 預設是按照比例縮放的,值為false 時不按比例縮放
*/
public void imgNoScale(String source, String output, int width, int height, boolean keepAspectRatio);
public void imgNoScale(File source, String output, int width, int height, boolean keepAspectRatio);
public void imgNoScale(URL source, String output, int width, int height, boolean keepAspectRatio);
public String imgNoScaleOutputStream(URL source, int width, int height, boolean keepAspectRatio);
/**
* 輸出到OutputStream
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param width
* 寬
* @param height
* 高
* @return toOutputStream(流對象)
*/
public OutputStream imgOutputStream(String source, String output, int width, int height);
public OutputStream imgOutputStream(File source, String output, int width, int height);
}
2、建立類ImageZoomServiceImpl,繼承ImageZoomService。
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import org.springframework.stereotype.Service;
import com.chaoxing.service.ImageZoomService;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.Thumbnails.Builder;
public class ImageZoomServiceImpl implements ImageZoomService {
public void imgThumb(String source, String output, int width, int height) {
try {
Thumbnails.of(source).size(width, height).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgThumb(File source, String output, int width, int height) {
try {
Thumbnails.of(source).size(width, height).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgThumb(URL source, String output, int width, int height) {
try {
Thumbnails.of(source).size(width, height).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgThumbOutputStream(URL source, int width, int height) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).size(width, height).toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
public void imgScale(String source, String output, double scale) {
try {
Thumbnails.of(source).scale(scale).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgScale(File source, String output, double scale) {
try {
Thumbnails.of(source).scale(scale).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgScale(URL source, String output, double scale) {
try {
Thumbnails.of(source).scale(scale).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgScaleOutputStream(URL source, double scale) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).scale(scale).toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
public void imgNoScale(String source, String output, int width, int height, boolean keepAspectRatio) {
try {
Thumbnails.of(source).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgNoScale(File source, String output, int width, int height, boolean keepAspectRatio) {
try {
Thumbnails.of(source).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgNoScale(URL source, String output, int width, int height, boolean keepAspectRatio) {
try {
Thumbnails.of(source).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgNoScaleOutputStream(URL source, int width, int height, boolean keepAspectRatio) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).size(width, height).keepAspectRatio(keepAspectRatio).toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
public OutputStream imgOutputStream(String source, String output, int width, int height) {
OutputStream os = null;
try {
os = new FileOutputStream(output);
Thumbnails.of(source).scale(width, height).toOutputStream(os);
} catch (IOException e) {
e.printStackTrace();
}
return os;
}
public OutputStream imgOutputStream(File source, String output, int width, int height) {
OutputStream os = null;
try {
os = new FileOutputStream(output);
Thumbnails.of(source).scale(width, height).toOutputStream(os);
} catch (IOException e) {
e.printStackTrace();
}
return os;
}
}
圖檔水印
1、建立ImageWatermarkService接口
import java.io.File;
import java.net.URL;
import net.coobird.thumbnailator.geometry.Position;
/*
* 圖檔水印
* */
public interface ImageWatermarkService {
/**
* 水印
*
* @param source
* 輸入源
* @param output
* 輸入源
* @param width
* 寬
* @param height
* 高
* @param position
* 水印位置 Positions.BOTTOM_RIGHT o.5f
* @param watermark
* 水印圖檔位址
* @param transparency
* 透明度 0.5f
* @param quality
* 圖檔品質 0.8f
*/
public void imgWatermark(String source, String output, int width, int height, Position position, String watermark,
float transparency, float quality);
public void imgWatermark(File source, String output, int width, int height, Position position, String watermark,
float transparency, float quality);
public void imgWatermark(URL source, String output, int width, int height, Position position, String watermark,
float transparency, float quality);
public String imgWatermarkOutputStream(URL source, int width, int height, Position position, String watermark,
float transparency, float quality);
}
2、建立ImageWatermarkServiceImpl類,繼承ImageWatermarkService
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import org.springframework.stereotype.Service;
import com.chaoxing.service.ImageWatermarkService;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Position;
public class ImageWatermarkServiceImpl implements ImageWatermarkService {
public void imgWatermark(String source, String output, int width, int height, Position position, String watermark,
float transparency, float quality) {
try {
Thumbnails.of(source).size(width, height)
.watermark(position, ImageIO.read(new File(watermark)), transparency).outputQuality(0.8f)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
;
}
public void imgWatermark(File source, String output, int width, int height, Position position, String watermark,
float transparency, float quality) {
try {
Thumbnails.of(source).size(width, height)
.watermark(position, ImageIO.read(new File(watermark)), transparency).outputQuality(0.8f)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgWatermark(URL source, String output, int width, int height, Position position, String watermark,
float transparency, float quality) {
try {
Thumbnails.of(source).size(width, height)
.watermark(position, ImageIO.read(new File(watermark)), transparency).outputQuality(0.8f)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgWatermarkOutputStream(URL source, int width, int height, Position position, String watermark,
float transparency, float quality) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).size(width, height)
.watermark(position, ImageIO.read(new File(watermark)), transparency).outputQuality(0.8f)
.toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
}
圖檔旋轉
1、建立接口ImageRoteService
/*
* 圖檔旋轉
* */
public interface ImageRoteService {
/**
* 旋轉 ,正數:順時針 負數:逆時針
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param width
* 寬
* @param height
* 高
* @param rotate
* 角度,正數順時針 負數逆時針
*/
public void imgRotate(String source, String output, int width, int height, double rotate);
public void imgRotate(File source, String output, int width, int height, double rotate);
public void imgRotate(URL source, String output, int width, int height, double rotate);
public String imgRotateOutputStream(URL source, int width, int height, double rotate);
}
2、建立類ImageRoteServiceImpl,并繼承ImageRoteService
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.springframework.stereotype.Service;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import net.coobird.thumbnailator.Thumbnails;
public class ImageRoteServiceImpl implements com.chaoxing.service.ImageRoteService {
public void imgRotate(String source, String output, int width, int height, double rotate) {
try {
Thumbnails.of(source).size(width, height).rotate(rotate).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgRotate(File source, String output, int width, int height, double rotate) {
try {
Thumbnails.of(source).size(width, height).rotate(rotate).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgRotate(URL source, String output, int width, int height, double rotate) {
try {
Thumbnails.of(source).size(width, height).rotate(rotate).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgRotateOutputStream(URL source, int width, int height, double rotate) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).size(width, height).rotate(rotate).toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
}
圖檔格式轉換
1、建立接口ImageFormatService
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
/*
* 圖檔格式轉換
* */
public interface ImageFormatService {
/**
* 轉化圖像格式
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param width
* 寬
* @param height
* 高
* @param format
* 圖檔類型,gif、png、jpg
*/
public void imgFormat(String source, String output, int width, int height, String format);
public void imgFormat(File source, String output, int width, int height, String format);
public void imgFormat(URL source, String output, int width, int height, String format);
public String imgFormatOutputStream(URL source, int width, int height, String format);
/**
* 輸出到BufferedImage
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param width
* 寬
* @param height
* 高
* @param format
* 圖檔類型,gif、png、jpg
* @return BufferedImage
*/
public BufferedImage imgBufferedImage(String source, String output, int width, int height, String format);
public BufferedImage imgBufferedImage(File source, String output, int width, int height, String format);
public BufferedImage imgBufferedImage(URL source, String output, int width, int height, String format);
}
2、建立ImageFormatServiceImpl類,并繼承ImageFormatService
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import org.springframework.stereotype.Service;
import com.chaoxing.service.ImageFormatService;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import net.coobird.thumbnailator.Thumbnails;
public class ImageFormatServiceImpl implements ImageFormatService {
public void imgFormat(String source, String output, int width, int height, String format) {
try {
Thumbnails.of(source).size(width, height).outputFormat(format).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgFormat(File source, String output, int width, int height, String format) {
try {
Thumbnails.of(source).size(width, height).outputFormat(format).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgFormat(URL source, String output, int width, int height, String format) {
try {
Thumbnails.of(source).size(width, height).outputFormat(format).toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgFormatOutputStream(URL source, int width, int height, String format) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).size(width, height).outputFormat(format).toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
public BufferedImage imgBufferedImage(String source, String output, int width, int height, String format) {
BufferedImage buff = null;
try {
buff = Thumbnails.of(source).size(width, height).asBufferedImage();
ImageIO.write(buff, format, new File(output));
} catch (IOException e) {
e.printStackTrace();
}
return buff;
}
public BufferedImage imgBufferedImage(File source, String output, int width, int height, String format) {
BufferedImage buff = null;
try {
buff = Thumbnails.of(source).size(width, height).asBufferedImage();
ImageIO.write(buff, format, new File(output));
} catch (IOException e) {
e.printStackTrace();
}
return buff;
}
public BufferedImage imgBufferedImage(URL source, String output, int width, int height, String format) {
BufferedImage buff = null;
try {
buff = Thumbnails.of(source).size(width, height).asBufferedImage();
ImageIO.write(buff, format, new File(output));
} catch (IOException e) {
e.printStackTrace();
}
return buff;
}
}
圖檔剪裁
1、建立接口ImageCutService
import java.io.File;
import java.net.URL;
import net.coobird.thumbnailator.geometry.Position;
/*
* 圖檔剪裁
* */
public interface ImageCutService {
/**
* 裁剪圖檔
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param position
* 裁剪位置
* @param x
* 裁剪區域x
* @param y
* 裁剪區域y
* @param width
* 寬
* @param height
* 高
* @param keepAspectRatio
* 預設是按照比例縮放的,值為false 時不按比例縮放
*/
public void imgSourceRegion(String source, String output, Position position, int x, int y, int width, int height,
boolean keepAspectRatio);
public void imgSourceRegion(File source, String output, Position position, int x, int y, int width, int height,
boolean keepAspectRatio);
public void imgSourceRegion(URL source, String output, Position position, int x, int y, int width, int height,
boolean keepAspectRatio);
public String imgSourceRegionOutputStream(URL source, Position position, int x, int y, int width, int height,
boolean keepAspectRatio);
/**
* 按坐标裁剪
*
* @param source
* 輸入源
* @param output
* 輸出源
* @param x
* 起始x坐标
* @param y
* 起始y坐标
* @param x1
* 結束x坐标
* @param y1
* 結束y坐标
* @param width
* 寬
* @param height
* 高
* @param keepAspectRatio
* 預設是按照比例縮放的,值為false 時不按比例縮放
*/
public void imgSourceRegion(String source, String output, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio);
public void imgSourceRegion(File source, String output, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio);
public void imgSourceRegion(URL source, String output, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio);
public String imgSourceRegionOutputStream(URL source, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio);
}
2、建立類ImageCutServiceImpl,并繼承ImageCutService接口
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.springframework.stereotype.Service;
import com.chaoxing.service.ImageCutService;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Position;
public class ImageCutServiceImpl implements ImageCutService {
public void imgSourceRegion(String source, String output, Position position, int x, int y, int width, int height,
boolean keepAspectRatio) {
try {
Thumbnails.of(source).sourceRegion(position, x, y).size(width, height).keepAspectRatio(keepAspectRatio)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgSourceRegion(File source, String output, Position position, int x, int y, int width, int height,
boolean keepAspectRatio) {
try {
Thumbnails.of(source).sourceRegion(position, x, y).size(width, height).keepAspectRatio(keepAspectRatio)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgSourceRegion(URL source, String output, Position position, int x, int y, int width, int height,
boolean keepAspectRatio) {
try {
Thumbnails.of(source).sourceRegion(position, x, y).size(width, height).keepAspectRatio(keepAspectRatio)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgSourceRegionOutputStream(URL source, Position position, int x, int y, int width, int height, boolean keepAspectRatio) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).sourceRegion(position, x, y).size(width, height).keepAspectRatio(keepAspectRatio).toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
public void imgSourceRegion(String source, String output, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio) {
try {
Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height).keepAspectRatio(keepAspectRatio)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgSourceRegion(File source, String output, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio) {
try {
Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height).keepAspectRatio(keepAspectRatio)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public void imgSourceRegion(URL source, String output, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio) {
try {
Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height).keepAspectRatio(keepAspectRatio)
.toFile(output);
} catch (IOException e) {
e.printStackTrace();
}
}
public String imgSourceRegionOutputStream(URL source, int x, int y, int x1, int y1, int width, int height,
boolean keepAspectRatio) {
ByteArrayOutputStream baos = null;
String binary = null;
try {
baos = new ByteArrayOutputStream();
Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height).keepAspectRatio(keepAspectRatio)
.toOutputStream(baos);
binary = Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return binary;
}
}