91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java圖片批量壓縮像素的實現方法是什么

發布時間:2021-12-09 13:21:35 來源:億速云 閱讀:208 作者:柒染 欄目:開發技術

Java圖片批量壓縮像素的實現方法是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

圖片壓縮大法

為了防止用戶流量的丟失,即使在5g 即將來臨的情況下,壓縮算法依舊是很有必要的,額跑題了,不好意思,今天介紹的不是壓縮算法,講啥呢?主要講講如何通過 java 將圖片進行壓縮,盡可能的控制壓縮損比,不僅僅是為了減少存儲,其目的是快速呈現給用戶,只有良好的體驗,才會在當今這個急躁的年代減少流量的損失。

最近因為公司要需要xxx認證上傳測試用例功能的具體截圖、發現有大小限制、所以就進行了圖片壓縮,簡單記錄一下。

壓縮前大小:

Java圖片批量壓縮像素的實現方法是什么

壓縮后大小:

Java圖片批量壓縮像素的實現方法是什么

具體代碼實現:

main方法測試:

 public static void main(String[] args) throws IOException {

        String modpath = "C:\\Users\\Administrator\\Desktop\\鯤鵬認證\\test\\";

        getFiles("C:\\Users\\Administrator\\Desktop\\鯤鵬認證\\測試用例清單", modpath, 160);//將圖片壓縮至100寬

    }

文件大小處理

/**

     * @param srcPath 原圖片路徑

     * @param desPath 轉換大小后圖片路徑

     * @param width   轉換后圖片寬度

     * @param height  轉換后圖片高度

     */

    public static void resizeImage(String srcPath, String desPath, int width, int height) throws IOException {

        File srcFile = new File(srcPath);

        Image srcImg = ImageIO.read(srcFile);

        BufferedImage buffImg = null;

        buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

        //使用TYPE_INT_RGB修改的圖片會變色

        buffImg.getGraphics().drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

        String filePath="";

        if (srcFile.getName().contains("#")) {

             filePath = srcFile.getName().replace("#", "");

        }else{

            filePath=srcFile.getName();

        }

        ImageIO.write(buffImg, "PNG", new File(desPath + filePath));

    }

獲取目錄文件信息

/**

     * @param scaleSize 圖片的修改比例,目標寬度

     */

    public static void getFiles(String path, String modPath, int scaleSize) throws IOException {

        ArrayList<String> files = new ArrayList<String>();

        File file = new File(path);

        File[] tempList = file.listFiles();

        //循環讀取目錄下圖片

        for (int i = 0; i < tempList.length; i++) {

            String filePath = tempList[i].getName();

            if (tempList[i].isFile()) {

                System.out.println("文件:" + filePath + "-" + tempList[i].getAbsolutePath().replaceAll("\\\\", "/"));

                String[] imagePath = tempList[i].getAbsolutePath().replaceAll("\\\\", "/").split("/");

                String imageNumber = null;

                FileUtil.resizeImage(tempList[i].getAbsolutePath().replaceAll("\\\\", "/"), modPath, 160, 160);

                files.add(tempList[i].toString());

            }

            if (tempList[i].isDirectory()) {

                  System.out.println("文件夾:" + tempList[i]);

            }

        }

        System.out.println(path + "下文件數量:" + files.size());

    }

控制臺目錄壓縮成功保存到盤符:

Java圖片批量壓縮像素的實現方法是什么

附:利用Graphics類如何進行壓縮圖像

Graphics類提供基本繪圖方法,Graphics類提供基本的幾何圖形繪制方法,主要有:畫線段、畫矩形、畫圓、畫帶顏色的圖形、畫橢圓、畫圓弧、畫多邊形、畫字符串等。 這里不做一一贅述, 進重點介紹一下,利用Graphics類如何進行壓縮圖像。不多說直接上代碼。

	/**

	 * compressImage

	 * 

	 * @param imageByte

	 *            Image source array

	 * @param ppi

	 * @return

	 */

	public static byte[] compressImage(byte[] imageByte, int ppi) {

		byte[] smallImage = null;

		int width = 0, height = 0;

 

		if (imageByte == null)

			return null;

 

		ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte);

		try {

			Image image = ImageIO.read(byteInput);

			int w = image.getWidth(null);

			int h = image.getHeight(null);

			// adjust weight and height to avoid image distortion

			double scale = 0;

			scale = Math.min((float) ppi / w, (float) ppi / h);

			width = (int) (w * scale);

			width -= width % 4;

			height = (int) (h * scale);

 

			if (scale >= (double) 1)

				return imageByte;

 

			BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

			buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

			ByteArrayOutputStream out = new ByteArrayOutputStream();

			ImageIO.write(buffImg, "png", out);

			smallImage = out.toByteArray();

			return smallImage;

 

		} catch (IOException e) {

			log.error(e.getMessage());

			throw new RSServerInternalException("");

		}

	}

其實,關鍵點就兩處

BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肥西县| 彩票| 翼城县| 平陆县| 新野县| 娄烦县| 大悟县| 同德县| 嘉鱼县| 麻栗坡县| 蓬安县| 三台县| 阳东县| 阿克| 德庆县| 全椒县| 枣强县| 青海省| 通渭县| 明水县| 黄大仙区| 都兰县| 武城县| 西贡区| 尉氏县| 微博| 宜兴市| 从江县| 东光县| 保康县| 裕民县| 中西区| 新巴尔虎右旗| 乌鲁木齐市| 衡南县| 西充县| 汕尾市| 资阳市| 临沧市| 永福县| 博白县|