测试类
public class App1
{
public static void main(String[] args)
{
try
{
PictureUtil.imageUniformScaleResize("/home/alderaan/1080x1920.jpg", "/data/result.jpg", 400, 800);
} catch (java.lang.Exception e)
{
e.printStackTrace();
}
System.out.println("执行完毕!");
}
}
图片工具类
import static org.bytedeco.opencv.global.opencv_core.BORDER_CONSTANT;
import static org.bytedeco.opencv.global.opencv_core.CV_8UC3;
import static org.bytedeco.opencv.global.opencv_core.copyMakeBorder;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imwrite;
import static org.bytedeco.opencv.global.opencv_imgproc.resize;
import java.io.FileNotFoundException;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Scalar;
import org.bytedeco.opencv.opencv_core.Size;
import org.bytedeco.opencv.opencv_core.UMat;
public class PictureUtil
{
public static void imageUniformScaleResize(String srcimageurl, String dstimageurl, int dstwidth, int dstheight)
throws Exception
{
if (dstwidth <= 0 || dstheight <= 0)
{
throw new Exception("Error! Dst width or height can not be zero!");
}
Mat srcimagemat = imread(srcimageurl);
if (0 == srcimagemat.cols() || 0 == srcimagemat.rows())
{
throw new FileNotFoundException("Error! File srcimageurl not found or illegal!");
}
UMat srcimage = new UMat(new Size(srcimagemat.cols(), srcimagemat.rows()), CV_8UC3);
srcimagemat.copyTo(srcimage);
UMat dstimage_result = new UMat(new Size(dstwidth, dstheight), CV_8UC3);
uniformScaleResize(srcimage, dstimage_result, dstwidth, dstheight);
boolean status = imwrite(dstimageurl, dstimage_result);
if (false == status)
{
throw new Exception("Error! Saving file " + dstimageurl + " error! Please check path!");
}
}
private static void uniformScaleResize(UMat srcimage, UMat dstimage_result, int dstwidth, int dstheight)
{
int srcwidth = srcimage.cols();
int srcheight = srcimage.rows();
int height = (int) (dstwidth * ((float) (srcheight) / srcwidth));
int width = (int) (dstheight * ((float) (srcwidth) / srcheight));
UMat dstimage = null;
if (height <= dstheight)
{
dstimage = new UMat(new Size(dstwidth, height), CV_8UC3);
resize(srcimage, dstimage, new Size(dstwidth, height));
} else
{
dstimage = new UMat(new Size(width, dstheight), CV_8UC3);
resize(srcimage, dstimage, new Size(width, dstheight));
}
int top = (dstheight - dstimage.rows()) / 2;
int down = (dstheight - dstimage.rows() + 1) / 2;
int left = (dstwidth - dstimage.cols()) / 2;
int right = (dstwidth - dstimage.cols() + 1) / 2;
copyMakeBorder(dstimage, dstimage_result, top, down, left, right, BORDER_CONSTANT, new Scalar(0, 0, 0, 0));
return;
}
}