Android圖片格式轉換為JPG
在做人臉識別專案中,首先需要註冊人臉,目前程式要求在指定的資料夾存入檔案格式為JPG的圖片即完成人臉註冊。使用中,部分使用者對JPG格式理解不深,誤以為只要以“.JPEG”或者“.jpg”結尾的圖片就是JPG格式,甚至有使用者還特意把“張三 .png”改成“張三.jpg”偽裝成JPG格式來滿足要求。
其實副檔名(.jpg)與檔案格式無關,是人們為了便於區分,強加的副檔名。就像linux系統裡檔案根本就沒有副檔名的。那麼如何通過程式碼判斷該圖片檔案是否是JPG呢?我們需要了解圖片檔案的儲存,bmp,jpg,png圖片儲存差異很大,但是歸結起來主要分為三部分:檔案頭,調色盤,資料區;我們可以通過讀取檔案頭來判斷該檔案的格式
如何快速確認一張圖片的檔案格式呢?其實任意一款文字編輯器都可以讀取檔案頭,下面以EditPlus為例;選中圖片右鍵用EditPlus開啟(彈框,選擇“否”),然後一堆亂碼出來了,然後從亂碼裡尋找下檔案頭即可。下面三張副檔名均為JPG的圖片中只有一張檔案格式為JPG的。
奶茶01.jpg,副檔名與檔案格式一致的圖片
王俊凱.jpg,副檔名.jpg,檔案格式為PNG:
周杰倫.jpg,副檔名為.jpg,實際檔案格式為BMP
揪出兩張偽JPG圖片檔案,如何快速修改檔案格式呢?常規做法就是用PS(或畫圖板)開啟圖片然後另存為JPG格式。好吧,說好的快速呢,PS也叫快啊?!其實吧,有一項你習焉不察的鵝廠黑科技——QQ截圖
下面我們就通過程式碼方式來修改圖片檔案為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