From 3edff028bfea1aff200fae4d9036743e51d7969e Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Wed, 8 Aug 2018 15:15:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=AF=A6=E6=83=85=E5=92=8C?= =?UTF-8?q?=E7=AD=94=E6=A1=88=E8=AF=A6=E6=83=85=E9=80=82=E9=85=8DGif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/rich_editor.js | 26 ++++++++++--- .../java/com/gh/common/util/ImageUtils.kt | 37 ++++++++++++++++--- .../java/com/gh/common/view/RichEditor.java | 16 ++++++-- .../com/gh/gamecenter/SuggestionActivity.java | 7 +++- .../com/gh/gamecenter/ViewImageActivity.java | 10 +++-- .../answer/detail/AnswerDetailFragment.java | 4 +- .../qa/answer/edit/AnswerEditFragment.java | 7 ++++ .../questions/edit/QuestionEditViewModel.kt | 7 ++-- app/src/main/res/values/strings.xml | 2 +- 9 files changed, 88 insertions(+), 28 deletions(-) diff --git a/app/src/main/assets/rich_editor.js b/app/src/main/assets/rich_editor.js index c888fe1b30..6605a7ed14 100644 --- a/app/src/main/assets/rich_editor.js +++ b/app/src/main/assets/rich_editor.js @@ -198,12 +198,18 @@ RE.insertImage = function(url) { } // 替换成缩略图 -RE.replaceTbImage = function(ruleFlag) { +RE.replaceTbImage = function(imgRuleFlag, gifRuleFlag) { var imgs = document.getElementsByTagName("img"); for (var i = 0; i < imgs.length; i++) { var img = imgs[i]; if(img.src.indexOf("?") > 0) continue; - var tbImg = img.src + ruleFlag + + var tbImg + if(img.src.indexOf(".gif") > 0) { + tbImg = img.src + gifRuleFlag + } else { + tbImg = img.src + imgRuleFlag + } img.style.cssText = "max-width: 60%; display:block; margin:15px auto; height: auto;" img.src = tbImg; @@ -219,7 +225,7 @@ RE.replaceTbImage = function(ruleFlag) { } // 替换成默认图 -RE.replaceAllDfImage = function(ruleFlag) { +RE.replaceAllDfImage = function(imgRuleFlag, gifRuleFlag) { var imgs = document.getElementsByTagName("img"); for (var i = 0; i < imgs.length; i++) { var img = imgs[i]; @@ -228,7 +234,11 @@ RE.replaceAllDfImage = function(ruleFlag) { i--; } else { img.style.cssText = "max-width: 100%; display:block; margin:8px auto; height: auto;" - img.src = img.src.split("?")[0] + ruleFlag + if(img.src.indexOf(".gif") > 0) { + img.src = img.src.split("?")[0] + gifRuleFlag + } else { + img.src = img.src.split("?")[0] + imgRuleFlag + } } } @@ -257,13 +267,17 @@ RE.hideShowBigPic = function() { } } -RE.replaceDfImageByUrl = function(imgUrl, ruleFlag) { +RE.replaceDfImageByUrl = function(imgUrl, imgRuleFlag, gifRuleFlag) { var imgs = document.getElementsByTagName("img"); for (var i = 0; i < imgs.length; i++) { var img = imgs[i]; if (img.src == imgUrl) { img.style.cssText = "max-width: 100%; display:block; margin:8px auto; height: auto;" - img.src = img.src.split("?")[0] + ruleFlag + if(img.src.indexOf(".gif") > 0) { + img.src = img.src.split("?")[0] + gifRuleFlag + } else { + img.src = img.src.split("?")[0] + imgRuleFlag + } } } RE.hideShowBigPic(); diff --git a/app/src/main/java/com/gh/common/util/ImageUtils.kt b/app/src/main/java/com/gh/common/util/ImageUtils.kt index 25ed7fbf02..a1e7351c01 100644 --- a/app/src/main/java/com/gh/common/util/ImageUtils.kt +++ b/app/src/main/java/com/gh/common/util/ImageUtils.kt @@ -23,6 +23,37 @@ import com.gh.gamecenter.R object ImageUtils { + private const val PIC_MAX_FILE_SIZE : Long = 10 * 1024 * 1024 + + @JvmStatic + fun getUploadFileMaxSize(): Long { + val uploadLimitSize = Config.getSettings()?.image?.uploadLimitSize + if (uploadLimitSize != null) { + return uploadLimitSize + } + return PIC_MAX_FILE_SIZE + } + + @JvmStatic + fun getDefaultGifRule(): String? { + val gifConfig = Config.getSettings()?.image?.oss?.gif + if (gifConfig != null) { + return gifConfig + } + return "" + } + + @JvmStatic + fun getWatermarkWidthGifRule(width: Int?): String? { + val gifConfig = Config.getSettings()?.image?.oss?.gitThumb + val gifWaterMark = Config.getSettings()?.image?.oss?.gifWaterMark + if (gifConfig != null && gifWaterMark != null) { + return "$gifConfig,w_$width$gifWaterMark" + } + return "" + } + + @JvmStatic fun getLimitWidthRule(width: Int?): String? { val jpegConfig = Config.getSettings()?.image?.oss?.jpeg @@ -173,12 +204,6 @@ object ImageUtils { // 图片下载监听和设置低高分辨率图片 fun display(simpleDraweeView: SimpleDraweeView?, url: String?, lowUrl: String?, listener: ControllerListener) { -// val builder = GenericDraweeHierarchyBuilder(simpleDraweeView?.getResources()) -// val hierarchy = builder -// .setFadeDuration(300) -// .setProgressBarImage() -// .build() -// simpleDraweeView?.setHierarchy(hierarchy) simpleDraweeView?.controller = Fresco.newDraweeControllerBuilder() .setImageRequest(ImageRequest.fromUri(url)) .setControllerListener(listener) diff --git a/app/src/main/java/com/gh/common/view/RichEditor.java b/app/src/main/java/com/gh/common/view/RichEditor.java index 376a7de466..75dfda5920 100644 --- a/app/src/main/java/com/gh/common/view/RichEditor.java +++ b/app/src/main/java/com/gh/common/view/RichEditor.java @@ -210,8 +210,12 @@ public class RichEditor extends WebView { try { exec("javascript:RE.setHtml('" + URLEncoder.encode(contents, "UTF-8") + "');"); - if (isLoadTbImage && !NetworkUtils.isWifiConnected(getContext())) { - exec("javascript:RE.replaceTbImage('" + ImageUtils.getLimitWidthRule(mThumbnailImageWidth) + IMAGE_FLAG_THUMBNAIL + "');"); + if (isLoadTbImage && NetworkUtils.isWifiConnected(getContext())) { + exec("javascript:RE.replaceTbImage('" + + ImageUtils.getLimitWidthRule(mThumbnailImageWidth) + IMAGE_FLAG_THUMBNAIL + "','" + + ImageUtils.getWatermarkWidthGifRule(mThumbnailImageWidth) + IMAGE_FLAG_THUMBNAIL + "');"); + } else { + replaceAllDfImage(); } exec("javascript:RE.ImageClickListener()"); @@ -306,7 +310,9 @@ public class RichEditor extends WebView { } public void replaceAllDfImage() { - exec("javascript:RE.replaceAllDfImage('" + ImageUtils.getLimitWidthRule(mDefaultImageWidth) + IMAGE_FLAG_DEFAULT + "')"); + exec("javascript:RE.replaceAllDfImage('" + + ImageUtils.getLimitWidthRule(mDefaultImageWidth) + IMAGE_FLAG_DEFAULT + "','" + + ImageUtils.getDefaultGifRule() + IMAGE_FLAG_DEFAULT + "')"); } public void setFocusByEnd() { @@ -314,7 +320,9 @@ public class RichEditor extends WebView { } public void replaceDfImageByUrl(String imgUrl) { - exec("javascript:RE.replaceDfImageByUrl('" + imgUrl + "','" + ImageUtils.getLimitWidthRule(mDefaultImageWidth) + IMAGE_FLAG_DEFAULT + "');"); + exec("javascript:RE.replaceDfImageByUrl('" + imgUrl + "','" + + ImageUtils.getLimitWidthRule(mDefaultImageWidth) + IMAGE_FLAG_DEFAULT + "','" + + ImageUtils.getDefaultGifRule() + IMAGE_FLAG_DEFAULT + "');"); } public void loadCSS(String cssFile) { diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index f218ce05e3..7d060a17a1 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -35,6 +35,7 @@ import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.ImageUtils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.PatternUtils; @@ -176,8 +177,10 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt Utils.log("picturePath = " + picturePath); File file = new File(picturePath); - if (file.length() > 8 * 1024 * 1024) { - toast(R.string.suggestion_pic_hint); + if (file.length() > ImageUtils.getUploadFileMaxSize()) { + long count = ImageUtils.getUploadFileMaxSize() / 1024 / 1024; + Utils.toast(this, getString(R.string.pic_max_hint, count)); + return; } else { String newPath = getCacheDir() + File.separator + System.currentTimeMillis() + ".jpg"; Observable.create((ObservableOnSubscribe) diff --git a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java index 4210f8fb1e..fe1ae13bd1 100644 --- a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java +++ b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java @@ -182,7 +182,12 @@ public class ViewImageActivity extends BaseActivity implements OnPageChangeListe } } })); - draweeView.setImageURI(urls.get(position)); + draweeView.setController(Fresco.newDraweeControllerBuilder() + // 高清图片 + .setImageRequest(ImageRequest.fromUri(urls.get(position))) + // 低分辨率图片 + .setLowResImageRequest(ImageRequest.fromUri(ImageUtils.addLimitWidth(urls.get(position), mLimitWidth))) + .build()); } }); } @@ -263,7 +268,6 @@ public class ViewImageActivity extends BaseActivity implements OnPageChangeListe } private void loadImage(String url, final ZoomSimpleDraweeView imageView) { - if (url.contains(".gif")) { DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(url) @@ -293,7 +297,7 @@ public class ViewImageActivity extends BaseActivity implements OnPageChangeListe Gh_RelativeLayout view = (Gh_RelativeLayout) View.inflate(container.getContext(), R.layout.viewimage_normal_item, null); ZoomSimpleDraweeView imageView = view.findViewById(R.id.viewimage_iv_show); - if (mImagePipeline.isInBitmapMemoryCache(Uri.parse(url))) { + if (mImagePipeline.isInBitmapMemoryCache(Uri.parse(url)) || url.contains(".gif")) { loadImage(url, imageView); } else { ImageUtils.addLimitWidthAndLoad(imageView, url, mLimitWidth, imageInfo -> { diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.java b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.java index 3d8095c16e..d09ab36935 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.java @@ -216,8 +216,6 @@ public class AnswerDetailFragment extends NormalFragment { } else { for (int i : mViewedImageSet) { String url = mAnswersImgs.get(i); - int lastPathDivider = url.lastIndexOf("/") + 1; - url = url.substring(0, lastPathDivider) + "tb/" + url.substring(lastPathDivider, url.length()); mRichEditor.replaceDfImageByUrl(url); } } @@ -607,7 +605,7 @@ public class AnswerDetailFragment extends NormalFragment { } else { int current = 0; for (int i = 0, size = mAnswersImgs.size(); i < size; i++) { - if (url.equals(mAnswersImgs.get(i))) { + if (url.contains(mAnswersImgs.get(i))) { current = i; } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java index 47fc5b7dbd..c588bab06c 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java @@ -24,6 +24,7 @@ import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.ClickUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.ImageUtils; import com.gh.common.util.LoginUtils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.UploadImageUtils; @@ -42,6 +43,7 @@ import org.jetbrains.annotations.NotNull; import org.json.JSONException; import org.json.JSONObject; +import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Locale; @@ -131,6 +133,11 @@ public class AnswerEditFragment extends NormalFragment { int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); + if (new File(picturePath).length() > ImageUtils.getUploadFileMaxSize()) { + long count = ImageUtils.getUploadFileMaxSize() / 1024 / 1024; + Utils.toast(getContext(), getString(R.string.pic_max_hint, count)); + return; + } postImg(picturePath); Utils.log("picturePath = " + picturePath); diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt index 408e1ee383..bb8c3f5c2f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt @@ -9,6 +9,7 @@ import android.provider.MediaStore import android.text.TextUtils import com.gh.base.fragment.WaitingDialogFragment import com.gh.common.util.GsonUtils +import com.gh.common.util.ImageUtils import com.gh.common.util.UploadImageUtils import com.gh.common.util.UrlFilterUtils import com.gh.gamecenter.R @@ -40,7 +41,6 @@ class QuestionEditViewModel(application: Application) : AndroidViewModel(applica const val QUESTION_TITLE_MIN_LENGTH = 6 const val QUESTION_CONTENT_MAX_LENGTH = 300 const val QUESTION_TITLE_MAX_LENGTH = 50 - const val PIC_MAX_FILE_SIZE = 10 * 1024 * 1024 } private val mApiService: ApiService = RetrofitManager.getInstance(getApplication()).api @@ -172,8 +172,9 @@ class QuestionEditViewModel(application: Application) : AndroidViewModel(applica Utils.log("picturePath = " + picPath) val file = File(picPath) - if (file.length() > PIC_MAX_FILE_SIZE) { - Utils.toast(getApplication(), R.string.suggestion_pic_hint) + if (file.length() > ImageUtils.getUploadFileMaxSize()) { + val count = ImageUtils.getUploadFileMaxSize() / 1024 / 1024 + Utils.toast(getApplication(), getApplication().getString(R.string.pic_max_hint, count)) return } else { val picList = picList.value diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4895443136..083d80f248 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -432,7 +432,7 @@ 昵称不能为空 - 图片大小不能超过8M + 图片不能大于%1$dMB,请重新选择 http://www.ghzs.com/link?source=appshare100 http://www.ghzs.com/link?source=appshare300 http://image.ghzs666.com/pic/57d604808ab49e467d8b4568.png