如何使用 SDWebImage 获取缩略图?
How to get thumbnail image using SDWebImage?
在用户选择图像之前,我不想从服务器下载图像。我想显示图像的缩略图。如何获取缩略图?
我可以使用 URL 从服务器下载完整图像。
如果服务器上的图片是 1MB,如何获取其缩略图版本?
有两种方法可以实现您的目标:
方式一:
您无法获取缩略图。如果您的文件大小为 1 MB,那么您必须使用 SDWebImage
下载它。下载完成后创建图像缩略图。现在您可以删除 1MB 的图像了。
创建缩略图的代码:
+ (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size
{
CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height);
CGFloat width = image.size.width * scale;
CGFloat height = image.size.height * scale;
CGRect imageRect = CGRectMake((size.width - width)/2.0f,
(size.height - height)/2.0f,
width,
height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[image drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
方式二:
在服务器端,您必须同时保留图像原始图像和缩略图。所以首先使用 SDWebImage
加载缩略图。当用户单击缩略图时,使用 SDWebImage
.
从服务器获取原始图像
当你有绝对 URL 并且只想使用 SDWebImage 显示图像时。
使用下面的代码
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:[NSURL URLWithString:strDisplayURL]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image)
{
dispatch_async(dispatch_get_main_queue(), ^{
profileImageView.image = image;
});
}
}];
使用图像模式。
并使圆角半径为图像视图高度或宽度的一半。所以它会变成圆形图像视图。
您无法从 ios device
更改服务器。您可以将数据放入服务器或从中获取数据。因此,如果大图像存储在服务器上,则无法将其设为 ios 的缩略图。您可以下载它,一旦图像出现在您的设备上,您就可以根据需要进行修改。
因此,将同一图像的两个副本保存到服务器是更好的方法,而且从服务器端来说这不是一项艰巨的任务。 :)
在用户选择图像之前,我不想从服务器下载图像。我想显示图像的缩略图。如何获取缩略图? 我可以使用 URL 从服务器下载完整图像。
如果服务器上的图片是 1MB,如何获取其缩略图版本?
有两种方法可以实现您的目标:
方式一:
您无法获取缩略图。如果您的文件大小为 1 MB,那么您必须使用 SDWebImage
下载它。下载完成后创建图像缩略图。现在您可以删除 1MB 的图像了。
创建缩略图的代码:
+ (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size
{
CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height);
CGFloat width = image.size.width * scale;
CGFloat height = image.size.height * scale;
CGRect imageRect = CGRectMake((size.width - width)/2.0f,
(size.height - height)/2.0f,
width,
height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[image drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
方式二:
在服务器端,您必须同时保留图像原始图像和缩略图。所以首先使用 SDWebImage
加载缩略图。当用户单击缩略图时,使用 SDWebImage
.
当你有绝对 URL 并且只想使用 SDWebImage 显示图像时。
使用下面的代码
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:[NSURL URLWithString:strDisplayURL]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image)
{
dispatch_async(dispatch_get_main_queue(), ^{
profileImageView.image = image;
});
}
}];
使用图像模式。
并使圆角半径为图像视图高度或宽度的一半。所以它会变成圆形图像视图。
您无法从 ios device
更改服务器。您可以将数据放入服务器或从中获取数据。因此,如果大图像存储在服务器上,则无法将其设为 ios 的缩略图。您可以下载它,一旦图像出现在您的设备上,您就可以根据需要进行修改。
因此,将同一图像的两个副本保存到服务器是更好的方法,而且从服务器端来说这不是一项艰巨的任务。 :)