社区首页 >问答首页 >在macOS上使用核心图像获取原始图像大小的正确方法是什么

在macOS上使用核心图像获取原始图像大小的正确方法是什么
EN

Stack Overflow用户
提问于 2021-05-04 22:19:53
回答 1查看 24关注 0票数 2

根据Core Image文档,以下API应返回原始图像的本机输出大小。

代码语言:javascript
代码运行次数:0
复制
let filter = CIFilter(imageURL: url, options: nil)
let value = filter.value(forKey: CIRAWFilterOption.outputNativeSize.rawValue ) as? CIVector

然而,这似乎总是返回相机的原始分辨率,而不是原始文件中包含的实际图像大小。

例如,如果我在Sony 19上以16:9宽高比拍摄的原始文件使用此API,图像大小应为6000 x 3376,但此API调用返回6000 x 4000。

这是一个bug,还是我遗漏了什么--有没有另一个API调用来获取实际的图像大小?

请注意,EXIF数据包含正确的图像大小。

EN

回答 1

Stack Overflow用户

发布于 2021-05-05 02:05:04

好的,似乎相机存储了一个缩略图,这是使用相机的纵横比设置生成的,但原始文件仍然包含完整的图像,即相机本地传感器大小。

当使用macOS QuickLook缩略图生成器时,您可以获得相机生成的缩略图,该缩略图被裁剪为当时设置的任何纵横比。

但是,当使用CIFilter获取原始CIImage时,您会得到完整的未裁剪图像。如果使用CIFilter查询图像大小,还可以获得完整的图像大小。

似乎裁剪后的图像大小是在EXIF的XDimension和YDimension属性中定义的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67392892

复制
相关文章
【编程基础】如何了解c语言中的位运算?
计算机的各种运算最小单位是字节,但是有时候只对某个位(bit)感兴趣,C语言提供了一些列位运算符来完成这个任务。这些操作非常重要,尤其是在嵌入式开发中会常常用到,这也是为什么嵌入式基本上都是选用C语言来开发的重要原因之一。 C语言的位运算有一下六中: & 按位与 | 按位或 ^ 按位亦或 ~ 按位取反 << 左移 >> 右移 按位与& 两个对应的位为1,运算后对应位为1,否则为0,比如:10101100 & 01101001 = 00101000。 按位或| 两
程序员互动联盟
2018/03/14
1.8K0
【编程基础】如何了解c语言中的位运算?
【编程基础】c语言中获取整数和浮点数的符号位
1. 为什么要获得符号位 很多时候,我们需要判断数值的正负,来做相应的逻辑处理。条件判断语句可以很好的完成这个需求。有时候会有下面的情况, if (x > 0) { x = x - 1; } else { x = 1 - x; } if (x < 0) { x = -x; } 正负只是数值的符号位变化,或是计算结果的符号位变化。但是我们需要用一个判断,首先条件判断会影响效率,其次格式不够简洁美观。所以,有时候希望能不用条件判断也解决问题。而数值的符号位已
程序员互动联盟
2018/03/13
2.2K0
C语言中数组的总结
数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。 eg:
全栈程序员站长
2022/08/14
2K0
C语言中数组的总结
[日常] C语言中的字符数组和字符串
c语言字符数组和字符串: 1.存放字符的数组称为字符数组 char str[] 2.'\0'也被称为字符串结束标志 3.由" "包围的字符串会自动在末尾添加'\0' 4.逐个字符地给数组赋值并不会自动添加'\0' 5.局部变量初始化为零值会自动添加结束标志 6.直接使用一个指针指向字符串的形式 char* str 7.最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。
唯一Chat
2019/09/10
2.4K0
c语言中位运算符的用法_c语言中位运算符的优先级
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。运位算包括位逻辑运算和移位运算,位逻辑运算能够方便地设置或屏蔽内存中某个字节的一位或几位,也可以对两个数按位相加等;移位运算可以对内存中某个二进制数左移或右移几位等。
全栈程序员站长
2022/11/10
8160
详解C语言中的数组指针与指针数组
数组指针的意思即为通过指针引用数组,p先和*结合,说明了p是一个指针变量,指向一个大小为5的数组。所以,int (*p)[5]即为一个数组指针。int *p[5]则是一个大小为5且存放整型指针的数组。
全栈程序员站长
2022/09/19
3.5K0
详解C语言中的数组指针与指针数组
C语言中的&和*
试想一下,如果没有&和*的存在,你可能每天都在为计算和寻找某个变量在哪里而发愁呢!
手撕代码八百里
2021/07/20
4.4K0
如何确定 C 语言中数组的大小
但上面的写法还有点不足。如果以后数组 a 的类型变为其它类型,那么 sizeof(int) 这种写法就会出现兼容问题,所以建议下面的写法,
ClearSeve
2022/02/11
2.2K0
C语言中指针数组和数组指针的区别
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。 下面到底哪个是数组指针,哪个是指针数组呢: A) int *p1[10]; B) int (*p2)[10]; 这里需要明白一个符号之间的优先级问题。 “[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,
用户1215536
2018/02/05
2K0
C语言中指针数组和数组指针的区别
c语言中位运算符_位运算符的用法
C语言的运算符是一个很有意思的东西,运用起来可以解决很多麻烦的事,但是想要灵活应用也有一定的难度,总结一下c语言运算符的用法和一些常用技巧.
全栈程序员站长
2022/11/09
8870
C语言中数组长度的计算详解
C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用;
一个会写诗的程序员
2023/01/08
3.1K0
C语言中数组长度的计算详解
从Ndom语浅谈语言中的进制
这题粗看复杂,其实不然。首先不难看出,abo、an并不是数字,所以不是加法就是乘法。因为abo出现的十分多,所以我们可以简单地假设abo是加法。接下来需要确定进制。我们知道1-10的乘方之间,出现了三个单独的词。不难得出,肯定1个是1,一个是基数的平方。除了这两个,只剩一个单独的词,那么这个词只可能是2^2=4。由此我们可以确定,Ndom语言的数字表达的基数肯定大于4且小于9。因为nif为很多长词的开头,所以nif应该是基数的平方。在题2的等式我们发现meregh乘上sas结尾的词,结果竟然还是以meregh尾!所以很明显sas就是1,于是thonith就是4。接着找,就找到了余下几个小于基数的词(于abo、an之后的较小):ithin、meregh、thef(可能是2、3、5)。剩下的mer、nif、tondor估计就是基数的倍数了,通过观察nif abo tondor abo mer abo thonith,发现nif>tondor>mer。按照推论,mer abo ithin应该是第三小的数字——9,那么mer应该就是基数了。ithin肯定不是1、4,所以排除5、8进制可能。那么就只剩下6、7进制两种可能了。分析得mer an thef abo thonith是第4小的,即16。mer*thef+4=16⇒mer*thef=12。所以只有一种可能:Ndom语言的数字是6进制。所以mer为6,thef为2,nif是mer的平方即36,ithin是9-6=3。排除法得,meregh是5。最后还有一个tondor,通过推断tondor abo mer abo sas≥6*2+6+1=19最近的平方数是25,可以判断tondor是18。至此,我们已经推断完成所有的词。剩下就是一些小小的规则,比如表示72,并不是nif an thef,而是直接nif thef。还有就是大的数字一定会在前。所以我们就能写出:58=36+18+4也就是nif abo tondor abo thonith,而87=36*2+6*2+3即nif thef abo mer an thef abo ithin。参考答案:
KAAAsS
2022/01/13
11.1K0
从Ndom语浅谈语言中的进制
【编程经验】C语言中左值和右值的区别
黄老师原创精品文章哦~ 在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出” left operand must be l-value ” 即左操作数必须为左值!,今天我们将为大家详细解释这两个词,以及两者的区别! 简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=”后边的就是右值,感觉像是废话,但非常好理解。但更多时候,我们是为了学习和理解不同情况下左值和右值的区别,下面来举例依次说明,着层深入,来让大家解渴! 1.变量做左值和右值的区别: 如 x = 2; 这里
编程范 源代码公司
2018/04/18
2.4K0
【编程经验】C语言中左值和右值的区别
C语言中的柔性数组 C语言结构体中char[0]和char[1]的用法
我在进行Linux 64位驱动程序兼容32位应用程序的适配过程中,深深的感觉指针操作带来的麻烦,特别是应用层的32位指针传到内核层后,指针大小变成64位,需要进行频繁的大小调整,及其难受。等我快完成所有工作的时候,听一位同事说可以使用char[0]用法来代替指针,我差点一口老血喷出来。“你咋不早说…”。接下来从网上各种google,发现了这种用法的巧妙,特写下此篇文章,以做记录。 (PS:还是要感谢我那位同事YYL,让我又get到一个技能^_^)
好派笔记
2021/09/17
2.9K0
c语言中按位异或运算_c语言按位与怎么算
备注 表达式可以是其他“与”表达式,或(遵循下面所述的类型限制)相等表达式、关系表达式、加法表达式、乘法表达式、指向成员的指针表达式、强制转换表达式、一元表达式、后缀表达式或主表达式。 按位“与”运算符 (&) 会将第一操作数的每一位与第二操作数的相应位进行比较。如果两个位均为 1,则对应的结果位将设置为 1。否则,将对应的结果位设置为 0。 按位“与”运算符的两个操作数必须为整型。 算术转换中所述的常用算术转换将应用于操作数。 & 的运算符关键字
全栈程序员站长
2022/11/18
2.8K0
C语言中如何获取数组的中位数
在C语言编程中,获取数组的中位数是一项常见而重要的任务。中位数是一个数组中的一个特殊值,它将该数组分为两个等长的部分。当数组长度为奇数时,中位数就是位于数组中间位置的元素;当数组长度为偶数时,中位数是中间两个元素的平均值。
用户10354340
2023/08/14
7910
c语言中getchar的运用_c语言中gets和getchar
2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n'(输入完s[i]的值后按回车键所致),
全栈程序员站长
2022/09/27
2.9K0
【编程经验】C语言中左值和右值的区别
在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出” left operand must be l-value ” 即左操作数必须为左值!,今天我们将为大家详细解释这两个词,以及两者的区别! 简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=”后边的就是右值,感觉像是废话,但非常好理解。但更多时候,我们是为了学习和理解不同情况下左值和右值的区别,下面来举例依次说明,着层深入,来让大家解渴! 开始了! 变量做左值和右值的区别
编程范 源代码公司
2018/04/18
1.5K0
【编程经验】C语言中左值和右值的区别
再议 C 语言中的指针与数组(4)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
耕耘实录
2019/09/18
1.5K0
在c语言中,数组 a[i++] 和数组 a[++i] 有区别吗? && 在c语言中,数组 a[0]++; 又是什么意思?
b = a++;    //先计算表达式的值,即先把a赋值给了b;然后a再自加1。 b = ++a;    //先a自加1后;然后把a自加后得到的赋值给b。
黑泽君
2018/10/11
3.3K0

相似问题

创建自定义时间戳存储桶bigquery

11

如何从云存储桶自动创建BigQuery表?

12

bigquery创建间隔15分钟的时间戳桶

19

使用时间戳主题模式的PubSub & BigQuery订阅

13

Laravel使用时间戳列从表中获取行

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文