android开发点9简单批量处理图片

android所有图片做点9,我的理解是图片大小可以减小,还有就是多屏兼容清晰度会好点,如果有什么不对还请指正

以前开发都是自己用draw9patch一张一张的做,有时只是简单的打开再保存,感觉好烦的,所以就反编译了一下draw9patch.jar,提取了一些关键代码写了一个简单的批量处理

关于点9的说明和用draw9patch制作见百度百科

废话不多说,直接上代码:

package tool;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
/**
 * 点9简单批量处理
 * @author karel
 */
public class PngUtil {	//处理目录
	public static final String dir9png="D:\\Hasee\\Desktop\\pngtest\\";
	public static void main(String[] args) {
		File fdir=new File(dir9png);
		if(fdir.isDirectory()){//遍历目录文件
			File[] files=fdir.listFiles();
			for(File f:files){
				if(f.isFile())
				to9Patch(f);
			}
		}
	}
	/**
	 * 转换成点9
	 */
	public static void to9Patch(File file){
		try {
			
			String fileName=file.getName().toLowerCase();
			/**
			 * 如果是点9图片或不是png图片直接返回
			 */
			if(fileName.endsWith(".9.png")||!fileName.endsWith(".png"))return;
			convertTo9Patch(loadCompatibleImage(file.toURI().toURL()),file);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private static void convertTo9Patch(BufferedImage image, File file) throws IOException {
		/**
		 * 高度和宽度增加两个点
		 */
		BufferedImage buffer = createTranslucentCompatibleImage(
				image.getWidth() + 2, image.getHeight() + 2);
		Graphics2D g2 = buffer.createGraphics();
		g2.drawImage(image, 1, 1, null);
		g2.dispose();
		image = buffer;
		String name=file.getName();
		/**
		 * 重命名点9.png
		 */
		name = (name.substring(0, name.lastIndexOf('.')) + ".9.png");
		ImageIO.write(image, "PNG", new File(dir9png+name));
	}

	private static BufferedImage createTranslucentCompatibleImage(int width,
			int height) {
		return getGraphicsConfiguration().createCompatibleImage(width, height,
				3);
	}

	private static GraphicsConfiguration getGraphicsConfiguration() {
		GraphicsEnvironment environment = GraphicsEnvironment
				.getLocalGraphicsEnvironment();
		return environment.getDefaultScreenDevice().getDefaultConfiguration();
	}

	private static BufferedImage loadCompatibleImage(URL resource)
			throws IOException {
		BufferedImage image = ImageIO.read(resource);
		return toCompatibleImage(image);
	}

	private static boolean isHeadless() {
		return GraphicsEnvironment.isHeadless();
	}

	private static BufferedImage toCompatibleImage(BufferedImage image) {
		if (isHeadless()) {
			return image;
		}
		if (image.getColorModel().equals(
				getGraphicsConfiguration().getColorModel())) {
			return image;
		}
		BufferedImage compatibleImage = getGraphicsConfiguration()
				.createCompatibleImage(image.getWidth(), image.getHeight(),
						image.getTransparency());

		Graphics g = compatibleImage.getGraphics();
		g.drawImage(image, 0, 0, null);
		g.dispose();
		return compatibleImage;
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值