public class ImgCodeUtils {
public static BufferedImage img_alpha(BufferedImage imgsrc,int alpha) {
try {
//创建一个包含透明度的图片,半透明效果必须要存储为png合适才行,存储为jpg,底色为黑色
BufferedImage back=new BufferedImage(imgsrc.getWidth(), imgsrc.getHeight(), BufferedImage.TYPE_INT_ARGB);
int width = imgsrc.getWidth();
int height = imgsrc.getHeight();
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
int rgb = imgsrc.getRGB(i, j);
Color color = new Color(rgb);
Color newcolor = new Color(color.getRed(), color.getGreen(),color.getBlue(), alpha);
back.setRGB(i,j,newcolor.getRGB());
}
}
return back;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static BufferedImage file2img(String imgpath) {
try {
BufferedImage bufferedImage=ImageIO.read(new File(imgpath));
return bufferedImage;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//保存图片,extent为格式,"jpg"、"png"等
public static void img2file(BufferedImage img,String extent,String newfile) {
try {
ImageIO.write(img, extent, new File(newfile));
} catch (Exception e) {
e.printStackTrace();
}
}
//压缩图片
public static BufferedImage getBufferedImage(Image src,int scale) {
int width = ( int ) (src.getWidth( null ) * scale / 100.0 );
int height = ( int ) (src.getHeight( null ) * scale / 100.0 );
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
bufferedImage.getGraphics().drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0 , 0 , null );
return bufferedImage;
}
public static BufferedImage scaleByPercentage(BufferedImage inputImage, int newWidth, int newHeight) throws Exception {
// 获取原始图像透明度类型
int type = inputImage.getColorModel().getTransparency();
int width = inputImage.getWidth();
int height = inputImage.getHeight();
// 开启抗锯齿
RenderingHints renderingHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 使用高质量压缩
renderingHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
BufferedImage img = new BufferedImage(newWidth, newHeight, type);
Graphics2D graphics2d = img.createGraphics();
graphics2d.setRenderingHints(renderingHints);
graphics2d.drawImage(inputImage, 0, 0, newWidth, newHeight, 0, 0, width, height, null);
graphics2d.dispose();
return img;
}
public static BufferedImage getUrlByBufferedImage(String url) {
try {
URL urlObj = new URL(url);
HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
// 连接超时
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setConnectTimeout(25000);
// 读取超时 --服务器响应比较慢,增大时间
conn.setReadTimeout(25000);
conn.setRequestMethod("GET");
conn.addRequestProperty("Accept-Language", "zh-cn");
conn.addRequestProperty("Content-type", "image/jpeg");
conn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)");
conn.connect();
BufferedImage bufImg = ImageIO.read(conn.getInputStream());
conn.disconnect();
return bufImg;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 传入的图像必须是正方形的 才会 圆形 如果是长方形的比例则会变成椭圆的
*
* @param
*
* @return
* @throws IOException
*/
public static BufferedImage convertCircular(BufferedImage bi1) throws IOException {
// BufferedImage bi1 = ImageIO.read(new File(url));
// 这种是黑色底的
// BufferedImage bi2 = new BufferedImage(bi1.getWidth(), bi1.getHeight(), BufferedImage.TYPE_INT_RGB);
// 透明底的图片
BufferedImage bi2 = new BufferedImage(bi1.getWidth(), bi1.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, bi1.getWidth(), bi1.getHeight());
Graphics2D g2 = bi2.createGraphics();
g2.setClip(shape);
// 使用 setRenderingHint 设置抗锯齿
g2.drawImage(bi1, 0, 0, null);
// 设置颜色
g2.setBackground(Color.green);
g2.dispose();
return bi2;
}
}
版权声明:本文为s853204755原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。