Java 如何将URL字符串末尾的低分辨率图像引用替换为可用的高分辨率图像引用
从API中,我从URL字符串中获得一个缩略图,类似于以下格式: . 然而,对于android应用程序的开发来说,这看起来非常糟糕 API中没有可用的高分辨率图像。然而,我发现,通过改变URL的结尾,图像以1000px甚至2000px的速度存在 我想将URL字符串更改为更高分辨率的版本,该版本存在于具有改进后缀的同一位置: 额外要求:Java 如何将URL字符串末尾的低分辨率图像引用替换为可用的高分辨率图像引用,java,android,split,android-image,Java,Android,Split,Android Image,从API中,我从URL字符串中获得一个缩略图,类似于以下格式: . 然而,对于android应用程序的开发来说,这看起来非常糟糕 API中没有可用的高分辨率图像。然而,我发现,通过改变URL的结尾,图像以1000px甚至2000px的速度存在 我想将URL字符串更改为更高分辨率的版本,该版本存在于具有改进后缀的同一位置: 额外要求: API很少给出500以外的不同大小,比如1000或250 在极少数情况下,它以.png而不是.jpg结尾(甚至可能是其他格式) 在极少数情况下,图像在较高分辨率
- API很少给出500以外的不同大小,比如1000或250
- 在极少数情况下,它以.png而不是.jpg结尾(甚至可能是其他格式)
- 在极少数情况下,图像在较高分辨率下不存在,应单独保存
/**
* Load an image from a URL and return a {@link Bitmap}
*
* @param url string of the URL link to the image
* @return Bitmap of the image
*/
private static Bitmap downloadBitmap(String url) {
Bitmap bitmap = null;
String newUrlString = url;
try {
// Change 500px image to 1000px image
URL oldUrl = new URL(url);
if (url.endsWith("500.jpg")) {
newUrlString = oldUrl.toString().replaceFirst("500.jpg", "1000.jpg");
}
InputStream inputStream = new URL(newUrlString).openStream();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
Log.e(LOG_TAG, e.getMessage());
}
return bitmap;
}
请尝试以下操作:
protected class ImageLoader extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
Bitmap bitmap = null;
String originalUrl = urls[0];
String url = urls[0].replaceFirst("/500.", "/1000.");
try {
InputStream inputStream = new URL(url).openStream();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
try {
InputStream inputStream = new URL(originalUrl).openStream();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception ignored) {
}
}
return bitmap;
}
protected void onPostExecute(Bitmap bitmap) {
//do whatever you want with the result.
if(bitmap!=null)
image.setImageBitmap(bitmap);
}
}
受保护的类ImageLoader扩展了异步任务{
受保护位图doInBackground(字符串…URL){
位图=空;
字符串originalUrl=URL[0];
字符串url=url[0].replaceFirst(“/500.”,“/1000.”);
试一试{
InputStream InputStream=新URL(URL).openStream();
位图=BitmapFactory.decodeStream(inputStream);
}捕获(例外e){
试一试{
InputStream InputStream=新URL(originalUrl).openStream();
位图=BitmapFactory.decodeStream(inputStream);
}捕获(忽略异常){
}
}
返回位图;
}
受保护的void onPostExecute(位图){
//对结果做任何你想做的事。
if(位图!=null)
setImageBitmap(位图);
}
}
我在这里所做的是创建了一个名为ImageLoader的异步任务(因为您的原始代码将抛出NetworkOnMainThreadException
)。它将处理图像url的请求;如果无法获取1000px版本,它将故障切换到映像的500px版本。
希望这能有所帮助。谢谢穆罕默德!在本课程中,我不允许使用图书馆,除非它们与所涵盖的课程完全无关。课程结束后,我将使用毕加索为我的应用程序处理下载的图像。好的,我已经相应地更新了代码。请注意,您不应该通过主线程进行网络调用。相反,使用多线程,例如将加载URL的代码放入异步任务或服务中。谢谢!我把它放在QueryUtils.java文件的底部。我想知道如何处理原始url向我抛出的任何大小,并将其更改为1000。我遇到过一些是800、250和其他随机数。所以不能搜索并用1000替换500。换句话说,如果anySize<1000,那么anySize==1000。我只是不知道如何像那样提取它。试试这个
stringurl=”http://mywebsite.com/2309.jpg";
字符串url\u 1000=url.replace(url.substring(url.lastIndexOf(“/”),“/1000.jpg”)代码>谢谢这工作得很好!因为我已经在QuyReutiLS.java类中拥有它而不是主线程,所以我使用了您在中间提供的代码,然后根据您最近的注释更新它。我无法投票支持你的答案,因为我没有足够的代表分数,但可以给你接受的答案!!