1. 程式人生 > >Android圖片格式轉換為JPG

Android圖片格式轉換為JPG

在做人臉識別專案中,首先需要註冊人臉,目前程式要求在指定的資料夾存入檔案格式為JPG的圖片即完成人臉註冊。使用中,部分使用者對JPG格式理解不深,誤以為只要以“.JPEG”或者“.jpg”結尾的圖片就是JPG格式,甚至有使用者還特意把“張三 .png”改成“張三.jpg”偽裝成JPG格式來滿足要求。

 其實副檔名(.jpg)與檔案格式無關,是人們為了便於區分,強加的副檔名。就像linux系統裡檔案根本就沒有副檔名的。那麼如何通過程式碼判斷該圖片檔案是否是JPG呢?我們需要了解圖片檔案的儲存,bmp,jpg,png圖片儲存差異很大,但是歸結起來主要分為三部分:檔案頭,調色盤,資料區;我們可以通過讀取檔案頭來判斷該檔案的格式

,最後會按照這種思路封裝的一個工具類,主要用於bmp,png轉換成JPG。

如何快速確認一張圖片的檔案格式呢?其實任意一款文字編輯器都可以讀取檔案頭,下面以EditPlus為例;選中圖片右鍵用EditPlus開啟(彈框,選擇“否”),然後一堆亂碼出來了,然後從亂碼裡尋找下檔案頭即可。下面三張副檔名均為JPG的圖片中只有一張檔案格式為JPG的。

奶茶01.jpg,副檔名與檔案格式一致的圖片


王俊凱.jpg,副檔名.jpg,檔案格式為PNG:

周杰倫.jpg,副檔名為.jpg,實際檔案格式為BMP


揪出兩張偽JPG圖片檔案,如何快速修改檔案格式呢?常規做法就是用PS(或畫圖板)開啟圖片然後另存為JPG格式。好吧,說好的快速呢,PS也叫快啊?!其實吧,有一項你習焉不察的鵝廠黑科技——QQ截圖

儲存型別選擇JPEG,檔名為”張三2.jpg“。然後把截圖的照片存入人臉註冊指定資料夾,終於可以識別了。

下面我們就通過程式碼方式來修改圖片檔案為JPG

package com.interjoy.jardemo;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;

/**
 * Title:
 * Description: 主要用於圖片格式轉換bmp/png-->JPG
 * Company: 北京xxxx科技有限公司,
[email protected]
* * @author Created by ylwang on 2018/1/24 */ public class PicUtils { private static final String TAG = "PicUtils"; private static final String PNG = "png"; private static final String JPG = "jpg"; private static final String JPEG = "jpeg"; private static final String BMP = "bmp"; // private static final String[] imgSuffixes = {PNG, JPG, JPEG, BMP}; private static final List<String> fileSuffixes = Arrays.asList(PNG, JPG, JPEG, BMP); // 快取檔案頭資訊-檔案頭資訊 private static final ArrayMap<String, String> mFileTypes = new ArrayMap<String, String>(); static { // images mFileTypes.put("FFD8FFE0", JPG); mFileTypes.put("89504E47", PNG); mFileTypes.put("424D5A52", BMP); } /** * 指定資料夾中的圖片檔案轉成JPG格式 * * @param dir 圖片的所在資料夾路徑 */ public static void ImgToJPG(File dir) { File[] files = dir.listFiles(); String filePath = ""; for (int i = 0; i < files.length; i++) { //先通過後綴名,過濾非圖片 String fileType = files[i].getName().substring(files[i].getName().lastIndexOf('.') + 1); if (fileSuffixes.contains(fileType.toLowerCase())) { filePath = files[i].getPath(); String imgType = mFileTypes.get(getFileHeader(filePath)); //獲取真正的檔案頭 if (!TextUtils.isEmpty(imgType) && !imgType.equals(JPG)) { convertToJpg(filePath, filePath.substring(0, filePath.lastIndexOf('.') + 1) + JPG); } } } } /** * 轉換成JPG格式圖片 並將原照片刪除 * * @param pngFilePath png或者bmp照片 * @param jpgFilePath jpg照片 */ private static void convertToJpg(String pngFilePath, String jpgFilePath) { Bitmap bitmap = BitmapFactory.decodeFile(pngFilePath); try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(jpgFilePath)); if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos)) { bos.flush(); } bos.close(); } catch (IOException e) { e.printStackTrace(); } finally { bitmap.recycle(); bitmap = null; } //刪除非JPG照片 if (!pngFilePath.equals(jpgFilePath)) { File oldImg = new File(pngFilePath); oldImg.delete(); } } /** * 根據檔案路徑獲取檔案頭資訊 * * @param filePath 檔案路徑 * @return 檔案頭資訊 */ private static String getFileHeader(String filePath) { FileInputStream is = null; String value = null; try { is = new FileInputStream(filePath); byte[] b = new byte[4]; is.read(b, 0, b.length); value = bytesToHexString(b); is.close(); } catch (IOException e) { e.printStackTrace(); } return value; } /** * 將要讀取檔案頭資訊的檔案的byte陣列轉換成string型別表示 * * @param src 要讀取檔案頭資訊的檔案的byte陣列 * @return 檔案頭資訊 */ private static String bytesToHexString(byte[] src) { StringBuilder builder = new StringBuilder(); if (src == null || src.length <= 0) { return ""; } for (int i = 0; i < src.length; i++) { // 以十六進位制(基數 16)無符號整數形式返回一個整數引數的字串表示形式,並轉換為大寫 String hv = Integer.toHexString(src[i] & 0xFF).toUpperCase(); if (hv.length() < 2) { builder.append(0); } builder.append(hv); } return builder.toString(); } }

相關推薦

Android圖片格式轉換JPG

在做人臉識別專案中,首先需要註冊人臉,目前程式要求在指定的資料夾存入檔案格式為JPG的圖片即完成人臉註冊。使用中,部分使用者對JPG格式理解不深,誤以為只要以“.JPEG”或者“.jpg”結尾的圖片就是JPG格式,甚至有使用者還特意把“張三 .png”改成“張三.jpg

如何把dwg格式轉換JPG格式

DWG文件格式是CAD文件的一種格式,CAD除了有dwg格式還有dwf等等的一些比較常見的格式。要在電腦中打開dwg格式文件就需要用到專業的CAD看圖軟件了。那麽,如何將dwg轉換成彩色的JPG圖片呢,要用到什麽軟件呢。下面就一起來看看詳細的操作方法吧。 1.打開迅捷CAD編輯

golang 執行命令列進行圖片格式轉換jpg轉png)

1.golang 執行命令列     cmd := exec.Command(命令, 傳入引數1, 傳入引數2,...)     cmd.Stdout = os.Stdout     if err := cmd.Run(); err != nil {        

使用python將圖片格式轉換ico格式

因為python打包的時候需要用到ico圖片格式,網上看好的圖片又沒有ico,於是自己尋找了一下python轉換圖片格式的方法,徹底解決這個問題,以後就可以自己輕鬆實現轉化了,程式碼如下: """ A

jpg圖片格式轉換dwg怎麽操作

這款軟件小編我為什麽說比較好呢?是因為這款軟件不僅能夠轉換文件格式而且還能夠對文件進行編輯,功能強大且能快速轉換,下面就以jpg圖片格式轉換dwg怎麽操作為例來給大家介紹一下使用這款軟件的操作步驟。 CAD編輯器下載http://www.downxia.com/d

c#的bitmap轉換JPG圖片(轉)

1 public static ImageCodecInfo GetEncoder(ImageFormat format) 2 { 3 ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); 4 foreach (

圖片路徑轉換圖片的base64格式

// 圖片轉化成base64字串 public static String GetImageStr(String imgFile) throws Exception {// 將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理 InputStream in = null

將Outlook Email轉換JPG圖片(程式碼功能只能轉當前第一頁,待優化)

Sub ExportEmailAsImage() Dim objMail As Outlook.MailItem Dim strFileName As String Dim strWordDocument As String Dim objWordApp As Wor

Matlab實現圖片格式轉換 pgm轉jpg

% 本示例程式將 H:\me的論文\其他\另一個數據\lfwcrop_grey\lfwcrop_grey\faces\目錄下面所有的 pgm 圖片轉換為 jpg 圖片 % 如果僅對一張 pgm 圖片作格式轉換,請直接看核心程式碼部分。 function [ ] = pgm2jpg(

如何將bmp格式圖片批量轉換jpg格式

  BMP(全稱Bitmap)是Windows作業系統中的標準影象檔案格式,不採用其他任何壓縮,因此,它的畫質比較清晰,基本可以還原拍攝畫質,淡水BMP檔案所佔用的空間很大。由於BMP檔案格式是Windows環境中交換與圖有關的資料的一種標準,因此在Windows環境中執行的圖形影象軟體都支援BMP影象格

圖片轉換器怎麼將HEIC轉換JPG

  蘋果手機heic格式圖片怎麼轉換jpg?對於iOS 11版本中的HEIC格式,有人歡喜有人憂。喜的是HEIC格式基於H.265編碼標準,使使用者拍出來的照片、視訊在不壓縮質量的同時佔用了更少的空間,另外FaceTime能用更少的流量實現同等的清晰度。憂的是現在市面上支援HEIC格式的軟體太少了,

如何將ppt轉換jpg圖片

  現在PPT的使用很廣泛,很多領域多會接觸到,比如公司開會、技能培訓、元旦晚會等都會用到PPT,但是有些時候為了方便,也會將PPT進行轉換處理,因為PPT看完一頁的時候都要手動進行點選進入下一頁,預覽的時候比較麻煩,所以一般我們會將PPT轉換成一張長圖來使用。那麼怎樣把PPT轉換為jpg圖片使用呢

Matlab實現圖片格式轉換 pgm轉jpg

    在Matlab下,轉換圖片格式相對比較容易,本文以 pgm 轉 jpg 為例,貼出示例程式: % 本示例程式將 C:\Users\kitty\test\目錄下面所有的 pgm 圖片轉換為 jpg 圖片 % 如果僅對一張 pgm 圖片作格式轉換,請直接看 核心程式

Android Glide載入圖片轉換圓形、圓角、毛玻璃等圖片效果

Android Glide載入圖片時轉換為圓形、圓角、毛玻璃等圖片效果 附錄1簡單介紹了Android開源的圖片載入框架。在實際的開發中,雖然Glide解決了快速載入圖片的問題,但還有一個問題懸而未決:比如使用者的頭像,往往使用者的頭像是從伺服器端讀出的一個普通矩形圖片

jpg轉換pgm(其他圖片格式轉換類似)

最近在看sift,下載了lowe的程式碼,發現使用的影象時pgm格式的,自己的多數圖片是jpg格式的,就開始進行轉換。 其實還是比較簡單明瞭的附程式碼如下function jpg2pgm( inputImage ) %JPG2PGM Summary of this fun

android將物件轉換json格式

前面說了是使用java將物件轉換為json格式的字串! 但是將上面的文章的方法寫在android專案中卻出現錯誤!好像是因為匯入的包出現問題!好像是包有衝突! 後來通過問別人才知道要用谷歌的jar包! 可以百度gson網上也有例子! Gson gson2=new Gson

CAD怎麽轉換圖紙格式?怎麽將CAD圖紙轉換JPG格式呢?

怎麽 png 常用 任務 能夠 在線 按鈕 在線轉換 聯合會 CAD怎麽轉換圖紙格式?怎麽將CAD圖紙轉換為JPG格式呢?相信小夥伴本在工作中經常會接觸到CAD圖紙格式的轉換,例如CAD轉PDF應該是小夥伴們最熟悉的差點圖紙轉換格式了,那麽對於CAD轉換JPG格式,你又有多

CAD怎麽轉換格式?CAD怎麽轉換JPG格式

重復 品質 需要 圖像壓縮 操作 解壓 瀏覽器中 dwg 軟件 CAD怎麽轉換格式?CAD怎麽轉換為JPG格式?首先和小夥伴們了解一下我們為什麽將要CAD格式圖紙轉換為JPG格式! JPG:JPEG是Joint Photographic Experts Group(聯合圖像

json日期格式轉換正常格式

ets 日期 gets urn second nbsp int pan bsp function jsonDateFormat(jsonDate) { try { var date = new Date(parseInt(jsonDate.repl

java之圖片格式轉換

圖片格式轉換package fileTest; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Arra