大家好,好久没有更新博客了。一个早9晚5点半的硬是上成了996。悲剧的加班狗!

背景:

        最近遇到一个图片压缩的问题,项目需求压缩图片500k以内上传服务器,还要求图片要清晰一点。还有证明是图片500k已经确实很清晰了,那就没办法,做呗~~!(不喜欢听bb的可以直接去下面撸代码)

思路

        本来以为很简单的问题,自己随意写了一个UIImageJPEGRepresentation的方法进行一个循环压缩不就搞定了?,后来事实证明这个玩意儿很坑,有太多东西不是你想当然的。

1.为什么不提UIImagePNGRepresentation(<#UIImage * _Nonnull image#>)?

   回复:据说这个读取图片的大小会比较大,因为是png格式,读取的内容会有多图层的的问题导致读取的会显示比较大,而且比较耗时间。网上有人做过测试:同样是读取摄像头拍摄的同样景色的照片,UIImagePNGRepresentation() 返回的数据量大小为199K,而 UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的数据量大小只为 140KB,比前者少了50多KB。如果对图片的清晰度要求不高,还可以通过设置 UIImageJPEGRepresentation 函数的第二个参数,大幅度降低图片数据量。
如果还有什么问题可以继续百度,这里不进行过多赘述。

2.首先第一个参数是我们都知道的图片image,但是第二个参数scale,一个0~1的浮点型比率,你以为0就是没有,压缩到0b大小,1.0就是原图大小?答案是?:错,首先你的图片的大小是根据(图片的宽*图片的高*每一个色彩的深度,这个和手机的系统有关,一般是4)。你的图片只会按照你的手机像素的分辨率[UIScreen mainScreen].scale来读取值。其次,第二个参数苹果官方并没有明确说明这个参数的具体意义。对于大图片来说,即使你的scale选的很小,比如:0.0000000(n个0)001,但是得到的结果还是很大,这里做了一个实验:一个10M左右的图片,处理后大小为2M多。有点像是“压不动”的感觉。当然如果是小图片的话那就是没问题,能满足你的希望的压缩到的大小。

        既然是循环压,那么就要说一下算法,考虑到递归,二分法,后来发现网上也是有的,二分法处理。更快一点压缩图片到指定的大小。先看一段代码:

//二分最大10次,区间范围精度最大可达0.00097657;最大6次,精度可达0.015625for (int i = 0; i < 10; ++i) {compression = (max + min) / 2;imageData = UIImageJPEGRepresentation(image, compression);//容错区间范围0.9~1.0if (imageData.length < fImageBytes * 0.9) {min = compression;} else if (imageData.length > fImageBytes) {max = compression;} else {break;}}

上面就是使用二分法进行处理,比for循环依次递减“高效”很多,而且也合理很多。

 

但是你也会问,压缩“压不动”怎么办?

这样压缩到“极致”(一般我们不用进行太多的for循环,个人觉得参数到0.05已经可以了如果还是比你想要的大很多那就不要用UIImageJPEGRepresentation了),劳民伤财,劳的是cpu的高速运转,伤的是手机老化加快。哈哈,皮一下!

然后我们其实可以换一个方式,进行尺寸压缩:

提到尺寸压缩,你会不会很失望,看你的文章,原来也是使用UIGraphicsBeginImageContextWithOptions然后drawInRect绘制一个图片,大小。代码类似如下:

/* 根据 dWidth dHeight 返回一个新的image**/
- (UIImage *)drawWithWithImage:(UIImage *)imageCope Size:(CGSize)size {
//这里设置为0,意为自动设置清晰度,图片可以是别的传过来的图片信息UIGraphicsBeginImageContextWithOptions(size, NO,0);[imageCope drawInRect:CGRectMake(0, 0, size.width, size.height)];imageCope = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return imageCope;
}

        首先我需要说一下这个绘制很耗内存性能的,[UIImage drawInRect:]在绘制时,先解码图片,再生成原始分辨率大小的bitmap,这是很耗内存的,并且还有位数对齐等耗时操作。如果在一个方法中循环压缩比例进行代码的比例压缩,那么这种使用UIKit类进行图片绘制的话是需要先把图片读入内存然后在进行绘制,那么势必会给内存中占用大量的临时内存bitmap,而这个如果再加上循环,那么内存占有将是不可估量的。

你可能会说,我加一个自动释放池@autoreleasepool,不就好了?

        错:首先这个自动释放池@autoreleasepool不要放在循环的外面,包着这个循环,原因就不过多说明,可以自行百度。然后放在for循环内部包着这个绘制的方法,你的内存并不是画完就得到了释放,内存占有的情况可以得到缓解,但是还是不能解决内存突然暴增的问题。尤其是大图片的压缩尤其明显。

         然后你会想换一个方式,这里我也亲测试了,使用Image I/O相关的处理方式,使用相关的生成缩略图的形式压缩图片文件。直接上代码如下:

记得导入相关的头文件
#import <AssetsLibrary/ALAsset.h>
#import <AssetsLibrary/ALAssetRepresentation.h>static size_t getAssetBytesCallback(void *info, void *buffer, off_t position, size_t count{ALAssetRepresentation *rep = (__bridge id)info;NSError *error = nil;size_t countRead = [rep getBytes:(uint8_t *)buffer fromOffset:position length:count error:&error];if (countRead == 0 && error) {// We have no way of passing this info back to the caller, so we log it, at least.NSLog(@"thumbnailForAsset:maxPixelSize: got an error reading an asset: %@", error);}return countRead;
}static void releaseAssetCallback(void *info) {// The info here is an ALAssetRepresentation which we CFRetain in thumbnailForAsset:maxPixelSize:.// This release balances that retain.CFRelease(info);
}- (UIImage *)thumbnailForAsset:(ALAsset *)asset maxPixelSize:(NSUInteger)size {NSParameterAssert(asset != nil);NSParameterAssert(size > 0);ALAssetRepresentation *rep = [asset defaultRepresentation];CGDataProviderDirectCallbacks callbacks = {.version = 0,.getBytePointer = NULL,.releaseBytePointer = NULL,.getBytesAtPosition = getAssetBytesCallback,.releaseInfo = releaseAssetCallback,};CGDataProviderRef provider = CGDataProviderCreateDirect((void *)CFBridgingRetain(rep), [rep size], &callbacks);CGImageSourceRef source = CGImageSourceCreateWithDataProvider(provider, NULL);CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(source, 0, (__bridge CFDictionaryRef) @{(NSString *)kCGImageSourceCreateThumbnailFromImageAlways : @YES,(NSString *)kCGImageSourceThumbnailMaxPixelSize : @(size),(NSString *)kCGImageSourceCreateThumbnailWithTransform : @YES,});CFRelease(source);CFRelease(provider);if (!imageRef) {return nil;}UIImage *toReturn = [UIImage imageWithCGImage:imageRef];CFRelease(imageRef);return toReturn;
}

这个是网上的,说的不清楚,(某两个人以及阿里云文档)只管代码补上,很反感。而且还有人搞了两个voidvoid,都是什么,,,,,自己搞了一下,这个东西,可以结合从数据库获取的info返回使用。这里代码如下:

#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {NSLog(@"info:\n%@", info);UIImage *image = info[UIImagePickerControllerOriginalImage];NSData *imgData = UIImageJPEGRepresentation(image, 1.0);NSLog(@"length1: %lu", (unsigned long)imgData.length);NSURL *imageURL = info[UIImagePickerControllerReferenceURL];ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];[assetsLibrary assetForURL:imageURL resultBlock:^(ALAsset *asset) {image = [self thumbnailForAsset:asset maxPixelSize:600];imgData = UIImageJPEGRepresentation(image, 1.0);NSLog(@"length2: %lu", (unsigned long)imgData.length);NSArray * paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"new/ceshi.jpg"];// 保存文件的名称BOOL result = [imgData writeToFile: filePath atomically:YES]; // 保存成功会返回YESNSLog(@"文件保存成功?%d",result);} failureBlock:nil];[picker dismissViewControllerAnimated:YES completion:^{}];
}

如果要是问我怎么打开相册?这里也配给你们:

 //初始化UIImagePickerController类UIImagePickerController * picker = [[UIImagePickerController alloc] init];//判断数据来源为相册picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;//设置代理picker.delegate = self;//打开相册[self presentViewController:picker animated:YES completion:nil];

记得声明一下代理。

使用ImageIO接口,避免在改变图片大小的过程中产生临时的bitmap,就能够在很大程度上减少内存的占有从而避免由此导致的app闪退问题。

在这之前我也直接有过另外一种方式压缩图片(直接靠图片尺寸压缩绘制图片):

+ (void)compressedImageFiles:(UIImage *)image imageKB:(CGFloat)fImageKBytes imageBlock:(ReturnCompressImage)block {__block UIImage *imageCope = image;CGFloat fImageBytes = fImageKBytes * 1024;//需要压缩的字节Byte__block NSData *uploadImageData = nil;//        uploadImageData = UIImagePNGRepresentation(imageCope);uploadImageData = UIImageJPEGRepresentation(imageCope, 1.0);
//    NSLog(@"图片压前缩成 %fKB",uploadImageData.length/1024.0);
//    CGFloat value1 = uploadImageData.length/1024.0;CGSize size = imageCope.size;CGFloat imageWidth = size.width;CGFloat imageHeight = size.height;if (uploadImageData.length > fImageBytes && fImageBytes >0) {dispatch_async(dispatch_queue_create("CompressedImage", DISPATCH_QUEUE_SERIAL), ^{/* 宽高的比例 **/CGFloat ratioOfWH = imageWidth/imageHeight;/* 压缩率 **/CGFloat compressionRatio = fImageBytes/uploadImageData.length;/* 宽度或者高度的压缩率 **/CGFloat widthOrHeightCompressionRatio = sqrt(compressionRatio);CGFloat dWidth   = imageWidth *widthOrHeightCompressionRatio;CGFloat dHeight  = imageHeight*widthOrHeightCompressionRatio;if (ratioOfWH >0) { /* 宽 > 高,说明宽度的压缩相对来说更大些 **/dHeight = dWidth/ratioOfWH;}else {dWidth  = dHeight*ratioOfWH;}imageCope = [self drawWithWithImage:imageCope width:dWidth height:dHeight];//            uploadImageData = UIImagePNGRepresentation(imageCope);uploadImageData = UIImageJPEGRepresentation(imageCope, 1.0);//            NSLog(@"当前的图片已经压缩成 %fKB",uploadImageData.length/1024.0);//微调NSInteger compressCount = 0;/* 控制在 1M 以内**/while (fabs(uploadImageData.length - fImageBytes) > 1024) {/* 再次压缩的比例**/CGFloat nextCompressionRatio = 0.9;if (uploadImageData.length > fImageBytes) {dWidth = dWidth*nextCompressionRatio;dHeight= dHeight*nextCompressionRatio;}else {dWidth = dWidth/nextCompressionRatio;dHeight= dHeight/nextCompressionRatio;}imageCope = [self drawWithWithImage:imageCope width:dWidth height:dHeight];//                uploadImageData = UIImagePNGRepresentation(imageCope);uploadImageData = UIImageJPEGRepresentation(imageCope, 1.0);/*防止进入死循环**/compressCount ++;if (compressCount == 10) {break;}}//            NSLog(@"图片已经压缩成 %fKB",uploadImageData.length/1024.0);
//            CGFloat value2 = uploadImageData.length/1024.0;imageCope = [[UIImage alloc] initWithData:uploadImageData];dispatch_sync(dispatch_get_main_queue(), ^{if (block) {block(imageCope);}});});} else{if (block) {block(imageCope);}}
}/* 根据 dWidth dHeight 返回一个新的image**/
+ (UIImage *)drawWithWithImage:(UIImage *)imageCope width:(CGFloat)dWidth height:(CGFloat)dHeight{UIGraphicsBeginImageContext(CGSizeMake(dWidth, dHeight));[imageCope drawInRect:CGRectMake(0, 0, dWidth, dHeight)];imageCope = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return imageCope;}

这种方式极耗手机的cpu,而且绘制也是使用uikit进行绘制,内存占用也是比较严重的。

总结:

综合上面的所有情况现在我的最终处理方案如下:

1.首先使用UIImageJPEGRepresentation进行尽可能的压缩,这里我使用二分法(考虑到手机性能问题,这里二分法设置10次(能精确到0.00097657)以内即可)处理压缩的比率参数,

2.首先根据我设置的二分法的最小可能压缩一下原图片信息,比对一下最小的二分法能处理的最大限度得到的最小图片信息能否满足条件(在你设定的目标大小以内)。以减少不必要的循环,保护cpu处理。

3.然后对处理后的图片信息,保留最大压缩比(即上面的最小二分法的scale结果),然后再进行和最终目标的大小比值,求根,然后对图像的宽和高等比压缩处理。然后再次根据最小二分法的scale以UIImageJPEGRepresentation读取结果再和你的目标大小比对,然后以此循环。直到大小小于目标大小。

这样得到的图片几乎就能够在你设定的大小以内的附近,而且图片的信息肉眼几乎看不出来多大的区别。亲自试了3M,4M,6M,10M的大图片没有发现内存消耗有太大的波动。而且压缩出来的图片清晰度很高。

这里上代码如下:

- (void)compressedImageFiles:(UIImage *)imageimageKB:(CGFloat)fImageKBytes imageBlock:(void(^)(NSData *imageData))block{//二分法压缩图片CGFloat compression = 1;NSData *imageData = UIImageJPEGRepresentation(image, compression);NSUInteger fImageBytes = fImageKBytes * 1000;//需要压缩的字节Byte,iOS系统内部的进制1000if (imageData.length <= fImageBytes){block(imageData);return;}CGFloat max = 1;CGFloat min = 0;//指数二分处理,s首先计算最小值compression = pow(2, -6);imageData = UIImageJPEGRepresentation(image, compression);if (imageData.length < fImageBytes) {//二分最大10次,区间范围精度最大可达0.00097657;最大6次,精度可达0.015625for (int i = 0; i < 6; ++i) {compression = (max + min) / 2;imageData = UIImageJPEGRepresentation(image, compression);//容错区间范围0.9~1.0if (imageData.length < fImageBytes * 0.9) {min = compression;} else if (imageData.length > fImageBytes) {max = compression;} else {break;}}block(imageData);return;}// 对于图片太大上面的压缩比即使很小压缩出来的图片也是很大,不满足使用。//然后再一步绘制压缩处理UIImage *resultImage = [UIImage imageWithData:imageData];while (imageData.length > fImageBytes) {@autoreleasepool {CGFloat ratio = (CGFloat)fImageBytes / imageData.length;//使用NSUInteger不然由于精度问题,某些图片会有白边NSLog(@">>>>>>>>>>>>>>>>>%f>>>>>>>>>>>>%f>>>>>>>>>>>%f",resultImage.size.width,sqrtf(ratio),resultImage.size.height);CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)),(NSUInteger)(resultImage.size.height * sqrtf(ratio)));
//            resultImage = [self drawWithWithImage:resultImage Size:size];
//            resultImage = [self scaledImageWithData:imageData withSize:size scale:resultImage.scale orientation:UIImageOrientationUp];resultImage = [self thumbnailForData:imageData maxPixelSize:MAX(size.width, size.height)];imageData = UIImageJPEGRepresentation(resultImage, compression);}}//   整理后的图片尽量不要用UIImageJPEGRepresentation方法转换,后面参数1.0并不表示的是原质量转换。block(imageData);}
- (UIImage *)thumbnailForData:(NSData *)data maxPixelSize:(NSUInteger)size {CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);CGImageSourceRef source = CGImageSourceCreateWithDataProvider(provider, NULL);CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(source, 0, (__bridge CFDictionaryRef) @{(NSString *)kCGImageSourceCreateThumbnailFromImageAlways : @YES,(NSString *)kCGImageSourceThumbnailMaxPixelSize : @(size),(NSString *)kCGImageSourceCreateThumbnailWithTransform : @YES,});CFRelease(source);CFRelease(provider);if (!imageRef) {return nil;}UIImage *toReturn = [UIImage imageWithCGImage:imageRef];CFRelease(imageRef);return toReturn;
}

demo地址:https://github.com/KirstenDunst/CSXImageCompress

demo里面我是做了批量压缩处理,对于多个大图处理,内存也是没有什么太大的波动的。这里附上demo中的批量压缩的图片存储路径:

如有问题,欢迎指正!

这里也奉献一些大图(6M,10M)以供测试。:https://pan.baidu.com/s/13eexiBPy_lyJxBLXIddnZw

 

后续补充:

       之前的测试中有发现使用上面demo中的方法有遇到iphone手机内存不足的手机拍的照片没有问题,再进行compressedImageFiles压缩处理的时候,会得到  “糊掉的”  图片,之后经过处理,在图片进行二分法压缩前,进行了一次图片的重绘操作解决了这个问题。以上的demo工具中的另一个方法resetSizeOfImage:能够解决这个问题。

 

扩展:

       其实上面的demo中提到的Quartz2D或者UIKit的类中对图片的压缩,水印,剪切等操作,当看过CoreGraphics之后觉得图片原来也可以这么玩。它是iOS的核心图形库,包含Quartz2D绘图API接口,常用的是point,size,rect等这些图形,都定义在这个框架中,类名以CG开头的都属于CoreGraphics框架,它提供的都是C语言函数接口,是可以在iOS和mac OS 通用的。刚接触,这里的了解并不是很深入,但是是更接近底层的图像处理,操作处理上面也是有着很大的灵活性,也有可能会解答iphone内存不足遇到的压缩图片需要重绘问题。之后有时间我会再次整理一篇CoreGraphics的图片处理文章,敬请期待吧!

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. [unity3d]unity中C#委托的应用

    C#中有一种还是挺实用的类型,就是委托类型,这也是初学者比较难理解的类型,我们常常将委托和事件合起来讲,其实他们两是有些区别的,委托(delegate)是一种类型,而事件(Event)是一种实例(委托中的一种)。下面我就从参考网上的一个例子,讲解一下unity中C#委托的应用。我们新…...

    2024/4/28 0:13:20
  2. Chrome浏览器无法访问百度的解决办法

    最近博主使用的Chrome浏览器频繁无法打开百度,其他网站都可以正常打开,搜索了一下也没有找到什么解决办法,网上的输入:chrome://net-internals/#hsts 方法行不通.但用ip地址202.108.22.5是可以进百度的,博主用的是macOS,在/private/etc中找到hosts文件,复制到其他目录一份,并加…...

    2024/4/28 3:49:14
  3. 关于火狐浏览器下载或导出文件 文件名中文乱码问题

    今日份工作任务是做一个导出报表的功能,高高兴兴的做完了以后,IE、谷歌、360等等浏览器都测试通过了了,在firefox浏览器中却出现如下情况:后台下载处代码如下图:在网上找了许多资料,大多是将文件名进行转码操作,但是因为我这里本身就已经对文件名进行了转码操作了,所以…...

    2024/4/28 2:01:19
  4. java生成压缩文件

    在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载。所以自己写了一个压缩文件的工具类。该工具类支持单个文件和文件夹压缩。放代码:import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS…...

    2024/4/17 22:36:40
  5. Quartz任务调度CronTrigger案例

    CronTrigger触发器 如果你需要像日历那样按日程来触发任务,而不是像SimpleTrigger那样每隔特定的间隔时触发,CronTrigger通常比SimpleTrigger更有用,因为Tahiti基于日历的作业调度器。 使用CronTrigger,你可以指定诸如每隔周五中午,或者每个工作日的9:30或者每隔周一,周三…...

    2024/4/18 18:56:59
  6. 基于Unity3D(UGUI)的背包系统(装备系统,锻造系统,购买系统)

    努力,从点滴做起,从开始就要写好自己的每一篇博客文章。 最近花了一段时间学习了一个关于Unity3D的背包系统,实现了背包里物品的各种功能:给角色装备物品功能,锻造物品功能,从商店购买物品功能,简单的拖拽,交换等功能。这里说的也只是纯粹的使用UI方面的知识,没有游戏…...

    2024/4/27 4:36:23
  7. google访问系列问题解决

    google浏览器搜索引擎无法搜索资料解决办法(无法访问此网站):http://www.iefans.cn/dongtai/798.htmlgoogle方案链接(人机验证解决方案):https://blog.azurezeng.com/recaptcha-use-in-china/RECAPTCHA 国内无法加载方案:https://blog.azurezeng.com/recaptcha-use-in-c…...

    2024/4/9 17:26:12
  8. Linux下访问Windows文件的乱码问题

    原链接: https://community.bwbot.org/topic/65 运行测试平台:小强ROS机器人 乱码问题主要分为文件名的乱码问题和文件内容的乱码问题。文件内容的乱码问题比较容易解决。只要文件编辑器有选择编码的功能(比如atom),选择正确的文件编码就可以了。一般如果在linux下打开windo…...

    2024/4/13 1:42:27
  9. 压缩感知进阶——有关稀疏矩阵

    上一篇《初识压缩感知Compressive Sensing》中我们已经讲过了压缩感知的作用和基本想法,涉及的领域,本文通过学习陶哲轩对compressive sensing(CS)的课程,对压缩感知做进一步理解,针对其原理做出讲解。本文较为理论性,代码请参考《“压缩感知”之“Hello world”》。Key…...

    2024/4/12 12:45:44
  10. Unity UGUI Scrollbar滚动条中文详解-Chinar

    Chinar blog :www.chinar.xinUnity UGUI 完整系列教程 (Chinar中文图解)Unity UGUI-Scrollbar本文提供全流程,中文翻译。 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能Chinar —— 心分享、心创新!助力快速掌握 Unity UGUI Scrollbar 的使用为初学…...

    2024/4/19 12:02:03
  11. 解决不能访问Google Groups网上论坛的办法(转)

    昨天察看GG Groups的时候总是被一些不知道的原因造成无法打开google的论坛 因为google在全球都有服务器,所以想到了一个简单的小办法~ 默认的google网上论坛地址是http://groups.google.com/ 这里应该是解析到了国内的gg服务器IP,这就给了某些人屏蔽GG ip的可乘之机! 别怕…...

    2024/4/19 15:52:39
  12. 图书馆管理系统类图实验报告

    (实验三)图书馆管理系统类图实验报告一、问题描述: 在建立图书馆管理系统中,首先需要画出类图,为了方便以后工作思路清晰,编码思路有条理。需画出图书馆管理系统类之间的关系,列出类的属性。本次试验就对图书馆管理系统的类图做出一系列列举,实现图书管理系统。二、框架…...

    2024/4/18 0:41:53
  13. html在ie浏览器中中文为什么是乱码

    第一种,html网页源代码编码与中文字输入编码不同。 解决方法: 使用软件进行编辑HTML网页内容,推荐使用DW软件进行HTML代码编辑和开发。 尽量不要直接使用记事本进行编辑HTML代码。 第二种,如果网页设置编码是gbk的,而数据库储存数据编码格式是UTF-8的,这个时候程序查询数…...

    2024/4/16 21:14:33
  14. 【Quartz】——CronTrigger 表达式的编写

    1. CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表。 CronTrigger,你可以指定触发的时间表如“每星期五中午”,或“每个工作日9:30时”,甚至“每5分钟一班9:00和10:00逢星期…...

    2024/4/12 12:46:09
  15. android6.0连接WIFI后显示“已连接,但无法访问互联网”实际可以上网

    该问题主要是由于google增加了wifi是否连通的验证,会向服务器captive_portal_server发送请求,根据返回结果判断连接wifi是否可用。此服务器是国外服务器,国内无法访问,所以总是显示“已连接,但无法访问互联网”, 解决改问题,关闭google验证开关: frameworks/base/ser…...

    2024/4/12 12:46:17
  16. 老生常谈:form表单中文乱码问题

    现象:(tomcat环境+页面UTF-8+JSP UTF-8)表单post含有中文时后台会接受出现类似‚‚这种乱码; 表单改为get后问题解决; 乱码通过String str = new String(“something”.getBytes(“ISO-8859-1”),“utf-8”)可还原成中文; 通过控制台查看如下:分析: 控制台显示提交的中…...

    2024/4/26 15:27:13
  17. Unity UGUI Slider滑动器中文详解-Chinar

    Chinar blog :www.chinar.xinUnity UGUI 完整系列教程 (Chinar中文图解)Unity UGUI-Slider 组件本文提供全流程,中文翻译。 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能Chinar —— 心分享、心创新!助力快速掌握 Unity UGUI Slider 组件的使用为初…...

    2024/4/12 12:46:21
  18. Ubuntu中使用dpkg命令时一直显示无法访问归档文件的原因:

    dpkg: 错误: 无法访问归档 ’ *.deb : 没有那个文件或目录 当使用浏览器下载了需要安装的文件时,那么文件应该位于 ~/Downloads 中。 此时我们使用dpkg是在~目录下,所以会一直显示无法访问归档 此时我们需要使用 cd 命令切换到 ~/Downloads 目录下,然后再使用dpkg就不会出现…...

    2024/4/13 1:43:03
  19. matplotlib画折线图中文乱码解决

    说到底,乱码的原因是因为没有安装中文字体导致的,所以首先要做的就是安装一个中文字体。报表中发现有中文乱码和中文字体不整齐(重叠)的情况,首先考虑的就是操作系统是否有中文字体,在CentOS 7中发现输入命令查看字体列表是提示命令无效: 如上图可以看出,不仅没有中文…...

    2024/4/12 12:46:13
  20. Unity Hinge Joint铰链组件

    Chinar blog :www.chinar.xinHinge Joint 铰链本文提供全流程,中文翻译。 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能Chinar —— 心分享、心创新!助力快速学习 Unity Hinge Joint 铰链关节的使用为初学者节省宝贵的时间,避免采坑!Chinar 教程…...

    2024/4/20 5:27:32

最新文章

  1. Github创建远程仓库(项目)

    天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

    2024/4/28 14:55:46
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 蓝桥杯第十五届抱佛脚(十)贪心算法

    蓝桥杯第十五届抱佛脚&#xff08;十&#xff09;贪心算法 贪心算法基本概念 贪心算法是一种在算法设计中常用的方法&#xff0c;它在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是最好或最优的算法。 贪…...

    2024/4/19 0:49:59
  4. 文心一言 vs gpt-4 全面横向比较

    文心一言是中国百度公司研发的大规模语言模型&#xff0c;它有超多的参数&#xff0c;就像一个超级大脑&#xff0c;特别擅长理解并生成中文内容。在聊天啊、写文章啊、答题这些任务上表现不错&#xff0c;对中国文化和国情有更深的理解和适应能力。 GPT-3.5是OpenAI公司的上一…...

    2024/4/22 16:28:44
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57