目前團隊開發(fā)的app痢法,后端服務(wù)全部假設(shè)在阿里云服務(wù)器柴钻。體驗到了阿里云oss圖片服務(wù)的便利性。
手冊地址
圖片處理提供以下功能:
- 獲取圖片信息
- 圖片格式轉(zhuǎn)換
- 圖片縮放、裁剪采幌、旋轉(zhuǎn)
- 圖片添加圖片劲够、文字、圖文混合水印
- 自定義圖片處理樣式
- 通過管道順序調(diào)用多種圖片處理功能
具體內(nèi)容可參考官網(wǎng)地址:https://help.aliyun.com/document_detail/44686.html?spm=5176.doc32207.6.937.iEYG5k
獲取圖片的縮略圖
通過在圖片的url路徑后添加處理參數(shù)來實現(xiàn)休傍。使用代碼示例如下
/**
* @param oriUrl 原url
* @param width 縮略圖的寬度
* @return 縮略圖的url
*/
public static String getThumbnailResourceUrl(String oriUrl, int width, int height) {
if (oriUrl == null || !oriUrl.toLowerCase().startsWith("http:")) {
return oriUrl;
}
StringBuffer result = new StringBuffer();
result.append(oriUrl);
result.append("@");
result.append(String.valueOf(width));
result.append("w_");
result.append(String.valueOf(height));
result.append("h_1l");
if (oriUrl.toLowerCase().endsWith(".gif")) {
result.append(".gif");
}
return result.toString();
}
但是該方案存在問題征绎,png圖片背景顯示為黑色。查閱圖片服務(wù)手冊(舊版)尊残,當前受用的縮略模式是指定廣告縮放炒瘸,具體見https://help.aliyun.com/document_detail/32218.html?spm=5176.doc32219.6.978.JX0ymF。其中關(guān)鍵注意事項如下:
如果不指定格式寝衫,原圖將默認轉(zhuǎn)換成jpg格式顷扩,如果原圖是png, webp, bmp可能會導致圖出現(xiàn)變形。詳細可以查看質(zhì)量變換及格式轉(zhuǎn)換慰毅。
根據(jù)上述語句隘截,該問題的解決方案就是:指定圖片的格式。
如何指定圖片格式呢汹胃,最終在基本概念頁面找到了如下說明婶芭。
基本概念.png
最終解決方案如下,在url后加上".png"着饥。gif圖片顯示同理
public static String getThumbnailResourceUrl(String oriUrl, int width, int height) {
if (oriUrl == null || !oriUrl.toLowerCase().startsWith("http:")) {
return oriUrl;
}
StringBuffer result = new StringBuffer();
result.append(oriUrl);
result.append("@");
result.append(String.valueOf(width));
result.append("w_");
result.append(String.valueOf(height));
result.append("h_1l");
if (oriUrl.toLowerCase().endsWith(".gif")) {
result.append(".gif");
} else if (oriUrl.toLowerCase().endsWith(".png")) {
result.append(".png");
}
return result.toString();
}
圖片旋轉(zhuǎn)
個別手機拍攝的照片帶有旋轉(zhuǎn)參數(shù)(存放在照片exif信息里面)犀农,如部分三星手機拍照有旋轉(zhuǎn)90度。這個時候獲取縮略時宰掉,需要自動旋轉(zhuǎn)呵哨。
參考自適應(yīng)方向的說明文檔,如下轨奄,
image.png
解決方案是url后添加o參數(shù)孟害。代碼如下:
public static String getThumbnailResourceUrl(String oriUrl, int width, int height) {
if (oriUrl == null || !oriUrl.toLowerCase().startsWith("http:")) {
return oriUrl;
}
StringBuffer result = new StringBuffer();
result.append(oriUrl);
result.append("@");
result.append(String.valueOf(width));
result.append("w_");
result.append(String.valueOf(height));
result.append("h_1l_2o");
if (oriUrl.toLowerCase().endsWith(".gif")) {
result.append(".gif");
} else if (oriUrl.toLowerCase().endsWith(".png")) {
result.append(".png");
}
return result.toString();
}