小编Boe*_*ckm的帖子

iOS图像方向具有奇怪的行为

在过去的几周里,我一直在使用objective-c中的图像并注意到许多奇怪的行为.首先,像许多其他人一样,我一直遇到这个问题,用相机拍摄的图像(或用别人的相机和MMS给我拍摄)旋转90度.我不确定为什么这个世界会发生这种情况(因此我的问题),但我能够提出一个廉价的工作.

这次我的问题是为什么会发生这种情况?为什么Apple会旋转图像?当我用相机正面拍摄照片时,除非我执行上面提到的代码,否则当我保存照片时,它会被保存为旋转状态.现在,我的解决方法在几天前还可以.

我的应用程序修改的图像的各个像素,特别是PNG(所以任何JPEG转换被抛出窗外对我的情况)的alpha通道.几天前,我注意到即使图像在我的应用程序中正确显示,这要归功于我的解决方法代码,当我的算法修改图像的各个像素时,它认为图像是旋转的.因此,而不是在图像的顶部修改像素,它修改的图像侧的像素(因为它认为它应该被旋转)!我无法弄清楚如何在内存中旋转图像 - 理想情况下,我宁愿只是擦掉那个imageOrientation标志.

这是另一个令我困惑的东西......当我拍摄照片时,imageOrientation设置为3.我的解决方法代码非常智能,可以实现这一点并将其翻转,以便用户永远不会注意到.此外,我将图像保存到库中的代码实现了这一点,将其翻转,然后将其保存,使其正确显示在相机胶卷中.

该代码如下所示:

NSData* pngdata = UIImagePNGRepresentation (self.workingImage); //PNG wrap 
UIImage* img = [self rotateImageAppropriately:[UIImage imageWithData:pngdata]];   
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
Run Code Online (Sandbox Code Playgroud)

当我这个新保存的图像加载到我的应用程序,则imageOrientation是0 -正是我想看到的,而我的旋转解决办法甚至不需要运行(注:加载从互联网上的图像时,而不是用相机拍摄的图像,imageOrientation总是0,导致完美的行为).出于某种原因,我的保存代码似乎擦除了这个imageOrientation标志.我希望只是窃取该代码,并在用户拍照并将其添加到应用程序时使用它来擦除我的imageOrientation,但它似乎不起作用.有UIImageWriteToSavedPhotosAlbum什么特别的imageOrientation吗?

对于这个问题,最好的解决办法就是imageOrientation在用户完成拍摄图像后立即将其吹走.我认为Apple出于某种原因完成了旋转行为,对吧?一些人认为这是Apple的缺陷.

(...如果你还没有丢失......注2:当我拍摄水平照片时,一切似乎都很完美,就像从互联网上拍摄的照片一样)

编辑:

以下是一些图像和场景的实际情况.根据目前为止的评论,看起来这种奇怪的行为不仅仅是一种iPhone行为,我认为这种行为很好.

这是我带着我的手机(注意正确的方向)的照片的图片,它显示的样子,因为它没有我的电话时,我拍下照片:

在iPhone上拍摄的实际照片

以下是我通过电子邮件将图片发送给自己后的图片(看起来像Gmail正确处理):

照片显示在Gmail中

这是图像在Windows中作为缩略图的样子(看起来不像是正确处理):

Windows缩略图

以下是使用Windows Photo Viewer打开时的实际图像(仍未正确处理):

Windows照片查看器版本

在对这个问题的所有评论之后,这就是我在想的...... iPhone拍摄了一张图片,并说"要正确显示它,它需要旋转90度".此信息将在EXIF数据中.(为什么它需要旋转90度,而不是默认直线垂直,我不知道).从这里开始,Gmail非常智能,可以读取和分析EXIF数据,并正确显示它.但是,Windows不够智能,无法读取EXIF数据,因此显示图像不正确.我的假设是否正确?

iphone objective-c ios

88
推荐指数
7
解决办法
9万
查看次数

iOS PNG图像旋转90度

在我写的iOS应用程序中,我处理PNG因为我处理alpha通道.出于某种原因,我可以将PNG加载到我的imageView正常状态,但是当需要将图像从我的应用程序中复制出来(到PasteBoard上)或将图像保存到我的相机胶卷时,图像会旋转90度.

我在这里搜索过,我学到的一件事是,如果我使用JPEG,由于EXIF信息,我不会有这个问题(听起来).

我的应用程序具有完整的复制/粘贴功能,这里是踢球者(我会在步骤中编写它以便更容易理解):

  1. 转到我的相机胶卷并复制图像
  2. 进入我的应用程序并按"粘贴",图像粘贴就好了,我可以整天这样做
  3. 单击我实现的复制功能,然后单击"粘贴",图像粘贴但旋转.

我100%确定我的复制和粘贴代码没有错在这里,因为如果我回到上面的第2步,然后单击"保存",照片将保存到我的库,但它旋转了90度!

更奇怪的是它似乎与从互联网上下载的图像一起工作正常,但是我手动用手机拍摄的图像非常受欢迎.有些它有效,有些则不...

有没有人对此有任何想法?我可以使用任何可能的工作吗?我对代码非常有信心,因为它适用于大约75%的图像.我可以根据要求发布代码.

iphone png exif objective-c ios

26
推荐指数
4
解决办法
3万
查看次数

理解一段代码

我做C#,没有VB的经验,我没有安装任何VB.我一直在看下面的代码,了解它是如何工作的,有人可以看看这个吗?

因此,如果我用Cat和调用此方法并且cat不传递可选参数,它是否返回true并说Cat并且cat相等?

Public Function AreStringsEqual(ByRef sString1 As String, ByRef sString2 As String, Optional ByVal eCompareMethod As VbCompareMethod = vbBinaryCompare) As Boolean

  If LenB(sString1) = LenB(sString2) Then
    If LenB(sString1) = 0 Then
      AreStringsEqual = True
    ElseIf eCompareMethod = vbBinaryCompare Then
      AreStringsEqual = (InStrB(1, sString1, sString2, eCompareMethod) <> 0)
    Else
      AreStringsEqual = (StrComp(sString1, sString2, eCompareMethod) = 0)
    End If
  End If
End Function
Run Code Online (Sandbox Code Playgroud)

vb.net vb6

4
推荐指数
1
解决办法
314
查看次数

php数字,例如(10M,..)

我想使用10M(代表1000000)和100K等数字。PHP中是否已经存在一个函数,还是我必须编写自己的函数?

我在想一些类似的事情:

echo strtonum("100K"); // prints 100000
Run Code Online (Sandbox Code Playgroud)

另外,再往前走一步,反过来,要翻译一下,从100000中得到10万吗?

php number-formatting

-3
推荐指数
1
解决办法
1516
查看次数

标签 统计

ios ×2

iphone ×2

objective-c ×2

exif ×1

number-formatting ×1

php ×1

png ×1

vb.net ×1

vb6 ×1