iOS怎么上传照片片问题,怎么解决

如何解决iOS设备中同步的照片拍摄时间与实际不符的乱序问题
来源:爱思助手
Apple早就开通了iCloud照片图库功能,但很多用户因为自己的免费iCloud空间不够用以及iCloud照片图库的各种BUG弃用它,而仍然使用传统的iTunes照片同步功能。然而,iTunes照片同步功能并非完美,现存在的一个最大问题就是同步的照片在iOS设备上显示的拍摄时间与实际不符,导致照片排列乱序,严重影响使用体验。比如一张照片是在2006年拍摄的,在iOS设备上竟然显示是今天拍摄的,一大堆真正今天拍的照片和一大堆老照片混在一起,看着实在难受。最新的iOS10推出了“回忆”功能,照片的乱序导致设备会将新旧照片放在一起组成一个“优美”的短片,让人哭笑不得。怎么办?看完以下10个步骤,你的问题即可解决。1. 转换照片的文件格式:照片必须是JPG或TIF格式,因为PNG格式无法记录EXIF信息,所以请先将所有的PNG格式照片转换成JPG格式;2. 补充照片的拍摄日期:在每张照片的EXIF信息中,都有一项叫做“拍摄日期”的属性,可在Windows资源管理器-&右键选择图片文件-&“属性”-&“详细信息”中查看和编辑,确保所有待同步的照片的这项属性都有真实的值,若为空,请自行补上(可批量操作);3. 修改照片的创建修改时间:使用Total Commander软件,选中所有照片文件,进入其菜单中的“文件”-&“更改属性”功能项,以“拍摄日期”为基准,如图修改照片文件的“修改日期”和“创建日期”,使三者保持一致(此步骤为可选项,建议执行,但若数量太多,可先忽略,待执行完其余步骤后,对仍无效的个别照片执行此步骤);4. 修改视频的创建修改时间:若含有视频文件(MOV格式或MP4格式),由于这些格式不存在“拍摄日期”的属性,则必须如图修改其文件的“修改日期”和“创建日期”为真实的拍摄时间;5. 规范文件的布局:建立或修正目录结构,使其符合这样的特征,图片根目录(如D盘下有一个“本机照片”文件夹),根目录下有若干个子目录(如“本机照片”文件夹下有“2010年广州游记”文件夹、“2013年北京游记”文件夹等等,每一个子文件夹将会在设备上显示为一个相簿),并确保每一个子目录下不再有目录,而只有照片或视频文件(如“2010年广州游记”文件夹下不可再有文件夹,只能有文件);6. 清空设备中的照片和视频:使用爱思助手,连接设备后进入“文件管理”功能项,在“用户系统”中找到“Photos”和“PhotoData”主目录,将这两个目录下的所有子目录和文件全部删除(不包括这两个主目录),然后重新启动设备;7. 删除iTunes的照片缓存:如果在此之前使用过iTunes照片同步功能,则需进入原来iTunes设定的照片存放的位置(如“本机照片”文件夹),找到并删除“iPod Photo Cache”文件夹以及其内的所有内容;8. 同步设备:在iTunes中重新设定新的照片存放位置(若位置无变化,则不需更改),然后进行一次同步;9. 二次同步:如果同步完毕后所有照片在设备上的显示均正常,则流程到此结束,否则需要跳过第7步而重新进行第6步和第8步的操作,即清空设备的照片视频但不删除“iPod Photo Cache”文件夹,再次进行同步;10. 纠错后再次同步:一般地,若第3步忽略了,则此次同步完毕后,仍有可能看到有一些老照片在设备上显示的拍摄时间为“今天”,此时需将这些照片在电脑上挑出来,对其进行第3步的处理,完成后再次进行第6步和第8步的操作,然后结束流程。ios开发 上传图片颠倒问题
曾遇到这样的一个问题,
自己上传到服务器的图片, 在请求回来莫名奇妙的就会颠倒了
解决办法只需要, 在图片上传之前, 做一下处理就可以了
//图片处理,此方法解决了, (手机竖屏拍照,图片会横倒的问题)
- (UIImage *)fixOrientation:(UIImage *)aImage {
if (aImage.imageOrientation ==UIImageOrientationUp)
CGAffineTransform transform =CGAffineTransformIdentity;
switch (aImage.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform,M_PI);
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,0);
transform = CGAffineTransformRotate(transform,M_PI_2);
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform,0, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
switch (aImage.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,0);
transform = CGAffineTransformScale(transform, -1,1);
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height,0);
transform = CGAffineTransformScale(transform, -1,1);
CGContextRef ctx =CGBitmapContextCreate(NULL, aImage.size.width,
aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.height,aImage.size.width),
aImage.CGImage);
CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.width,aImage.size.height),
aImage.CGImage);
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg =CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImageimageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
没有更多推荐了,移动端上传照片 预览(解决iOS等设备照片旋转90度的bug)
本人的一个移动端H5项目,需求如下:
手机相册选取或拍摄照片后在页面上预览
然后绘制在canvas画布上。
这里,我们先看一个demo()
操作步骤:
1、点击选择文件,拍摄一张照片,此时"预览:"文字下会显示你刚才拍摄的照片;
2、再点击"draw on Canvas",该按钮下的画布会绘制你刚才拍摄的照片。
正常的结果:
让input file支持拍照+相册选取
&input accept="image/*" type="file" id="file"
//有一些特殊的安卓机还需要加上 capture="camera" 属性才能支持拍照
需求一的预览功能使用html5提供的新API:FileReader
FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据。
https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
主流浏览器都支持。除了IE有点问题,详情看下图:
使用方法(使用drawTempPhoto方法实现需求一):
//绘制照片
function drawTempPhoto() {
//检验是否为图像文件
var file = document.getElementById("file").files[0];
if (!/image\/\w+/.test(file.type)) {
alert("看清楚哦,这个需要图片!");
return false;
var reader = new FileReader();
//将文件以Data URL形式读入页面
reader.readAsDataURL(file);
reader.onload = function (e) {
//预览效果
var img = $("#photo")[0];
//加载图片,此处的this.result为base64格式
img.src = this.
在本人的三星note5的手机中,需求一会出现照片预览逆时针旋转90度的bug(其实用下面介绍的的exif.js方法,可以知道iOS和三星所拍的照片Orientation值都是6,而前者做了预览的修正,后者则直接显示了出来,导致了旋转)。
判断是否为三星手机设备,然后把预览的图片顺时针旋转90度恢复正常(例如可以用canvas技术模拟预览效果)。
于是修改的drawTempPhoto方法如下(line:21-27):
//绘制照片
function drawTempPhoto() {
//检验是否为图像文件
var file = document.getElementById("file").files[0];
if (!/image\/\w+/.test(file.type)) {
alert("看清楚哦,这个需要图片!");
return false;
var reader = new FileReader();
//将文件以Data URL形式读入页面
reader.readAsDataURL(file);
reader.onload = function (e) {
//预览效果
var img = $("#photo")[0];
//加载图片,此处的this.result为base64格式
img.src = this.
img.onload = function(){
//获取照片的拍摄方向
var orient = getPhotoOrientation(img);
alert("orient1:" + orient);
//判断是否是三星手机
// if (isSamsung) {
// 做旋转的适配……
需求二绘制到Canvas,使用exif.js解决iOS(包括三星note5)等一些手机照片旋转90度的bug
在iOS上,表现如下:
可见,在iOS上第一张图正常,而第二张图逆时针旋转了90度,而其他的安卓两步都是正常的显示。
那我们来看看exif.js是什么?
Exif.js 提供了 JavaScript 读取图像的原始数据的功能扩展,例如:拍照方向、相机设备型号、拍摄时间、ISO 感光度、GPS 地理位置等数据。
EXIF 数据主要来自拍摄的照片,多用于移动端开发,PC 端也会用到,此插件兼容主流浏览器,IE10 以下不支持。
下载地址:
这里我们知道了exif.js其实是获取一张拍摄照片的元信息的,进而获取它最初的拍照方向,这很可能跟iOS图片旋转的bug有关。
而exif.js提供的一张照片的Orientation属性如下:
解决方案:
1、我首先引入exif.js:
&script src="./js/exif.js"&&/script&
2、然后封装成getPhotoOrientation方法:
//获取照片的元信息(拍摄方向)
function getPhotoOrientation(img){
EXIF.getData(img, function () {
orient = EXIF.getTag(this, ‘Orientation‘);
3、分别在操作步骤一选择图片和操作步骤二draw on Canvas,Alert照片的Orientation值,本人的测试机有限,请见谅,结果如下:
Orientation值
华为荣耀4A
可以看到,小米4S和PC都是undefined,表示图片没有拍摄方向或者根本没记录,华为荣耀4A是1,表示的是正确的方向,以上都没问题。但iphone 6S为6!所以之所以出现了图片的旋转,是因为它本身的Orientation就不正常!!
因此解决这个bug的思路是:获取到照片拍摄的方向,对ios照片进行角度旋转修正。
修改的demo如下:http://jsfiddle.net/qz5ev26/embedded/
除了上面引入的exif.js和添加的getPhotoOrientation方法,我又修改了drawPhoto方法:
①旧drawPhoto方法:
//绘制照片
function drawPhoto(photo, x, y, w, h) {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
//draw on Canvas
var img = new Image();
img.onload = function () {
var canvas_w = Number(ctx.canvas.width);
var canvas_h = Number(ctx.canvas.height);
// 执行Canvas的drawImage语句
ctx.drawImage(img, x, y, w, h);
img.src = photo. // 设置图片源地址
②新drawPhoto方法:(line:4-6,19-30)
//绘制照片
function drawPhoto(photo, x, y, w, h) {
//获取照片的拍摄方向
var orient = getPhotoOrientation(photo);
alert("orient2:"+orient);
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
//draw on Canvas
var img = new Image();
img.onload = function () {
var canvas_w = Number(ctx.canvas.width);
var canvas_h = Number(ctx.canvas.height);
//判断图片拍摄方向是否旋转了90度
if (orient == 6) {
ctx.save();//保存状态
ctx.translate(canvas_w / 2, canvas_h / 2);//设置画布上的(0,0)位置,也就是旋转的中心点
ctx.rotate(90 * Math.PI / 180);//把画布旋转90度
// 执行Canvas的drawImage语句
ctx.drawImage(img, Number(y) - canvas_h / 2, Number(x) - canvas_w / 2, h, w);//把图片绘制在画布translate之前的中心点,
ctx.restore();//恢复状态
// 执行Canvas的drawImage语句
ctx.drawImage(img, x, y, w, h);
img.src = photo. // 设置图片源地址
运行结果如下:
没有更多推荐了,ios上传图片如何解决丢包的原因_百度知道
ios上传图片如何解决丢包的原因
我有更好的答案
请描述什么叫HTTPs强转,如果指的是使用HTTPS协议,由于HTTPS需要握手来鉴定证书合法性,所以会比较慢
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。当前位置:
iOS 七牛图片上传,错误响应怎么解决?
iOS 七牛图片上传,错误响应怎么解决?
来源:网络整理&&&&&时间: 6:43:39&&&&&关键词:
关于网友提出的“ iOS 七牛图片上传,错误响应怎么解决?”问题疑问,本网通过在网上对“ iOS 七牛图片上传,错误响应怎么解决?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: iOS 七牛图片上传,错误响应怎么解决?
描述:七牛上传图片进度一直到0.95报错报错信息:&QNResp 045DDA6D-EF09-40B2-99D5-DCAA62330C3C, ver: 7.1.0, status: 400, requestId: NwkAAE39Vn76IH8U, NwkAAE39Vn76IH8U, xlog: body:3;UP:3/400;UP:28/400, xvia: 1.1 fwt16:2 (Cdn Cache Server V2.0), host: upload.qiniu.com ip: 60.10.3.48 duration: 8.792564 s time:
error: Error Domain=qiniu.com Code=400 "(null)" UserInfo={error=incorrect zone, please use up-z1.qiniu.com}&
QNresp========(null)代码:-(void)requestQNWithdata:(NSData *)data{
AFManagerHelp *manager = [[AFManagerHelp alloc]init];
[manager POST:uploadNOToken Splice:nil parameters:nil success:^(id responseObject) {
NSString *upToken = [responseObject objectForKey:@"uptoken"];
NSLog(@"token::===== %@",upToken);
[self uploadPictureToQiNiu:data withToken:upToken];
} failure:^(NSError *error) {
NSLog(@"QNerror==%@",error.userInfo);
//上传七牛
-(void)uploadPictureToQiNiu:(NSData *)data withToken:(NSString *)token{
QNUploadManager *upManager = [[QNUploadManager alloc]init];
QNUploadOption * uploadOption= [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {
NSLog(@"QNpercent == %.2f",percent);
} params:nil checkCrc:NO cancellationSignal:nil];
[upManager putData:data key:nil token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSLog(@"QNinfo ===== %@\nQNresp========%@",info,resp);
} option:uploadOption];
}说我方法写错还是token问题?解决方案1:提示信息说,是路径问题,按提示,把qiniu.com,换成up-z1.qiniu.com就妥了,两个方法1.你在项目里搜qiniu.com,会发现有两个方法,一个zone0,一个zone1,把里面的qiniu.com,改成up-z1.qiniu.com2.或者,你进QNConfiguration.m,QNConfigurationBuilder类的init的方法里,有句_zone = [QNZone zone0];,你把这里改喽,改成up-z1.qiniu.com的那个zone就行了恩恩,就酱&( ̄︶ ̄)&ps:个人建议用方法2
以上介绍了“ iOS 七牛图片上传,错误响应怎么解决?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/4108240.html
上一篇: 下一篇:}

我要回帖

更多关于 抖音怎么上传照片 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信