小编Bit*_*ank的帖子

从jpeg文件中提取缩略图

我想从jpegs中提取缩略图,没有任何外部库.我的意思是这并不太难,因为我需要知道缩略图的起始位置,并在文件中结束,然后简单地剪切它.我研究了许多文档(即:http://www.media.mit.edu/pia/Research/deepview/exif.html),并尝试分析jpeg,但并非一切都清楚.我试图逐步跟踪字节,但在深度我困惑.是否有任何好的文档或可读的源代码来提取有关jpeg文件中缩略图开始和结束位置的信息?

谢谢!

jpeg exif extract

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

如何阻止GCC打破我的NEON内在函数?

我需要为项目编写优化的NEON代码,我非常乐意编写汇编语言,但为了便携性/可维护性,我使用的是NEON instrinsics.这段代码需要尽可能快,所以我利用我在ARM优化方面的经验来正确地交错指令并避免管道停顿.无论我做什么,GCC都会对我起作用,并且会创建更慢的代码.

有谁知道如何让GCC摆脱困境并将我的内在函数转换为代码?

这是一个例子:我有一个简单的循环来否定和复制浮点值.它一次使用4组4个,以便为内存加载和执行指令留出一些时间.剩下很多寄存器,所以它没有理由把事情搞糟.

float32x4_t f32_0, f32_1, f32_2, f32_3;
int x;
for (x=0; x<n-15; x+=16)
{
   f32_0 = vld1q_f32(&s[x]);
   f32_1 = vld1q_f32(&s[x+4]);
   f32_2 = vld1q_f32(&s[x+8]);
   f32_3 = vld1q_f32(&s[x+12]);
   __builtin_prefetch(&s[x+64]);
   f32_0 = vnegq_f32(f32_0);
   f32_1 = vnegq_f32(f32_1);
   f32_2 = vnegq_f32(f32_2);
   f32_3 = vnegq_f32(f32_3);
   vst1q_f32(&d[x], f32_0);
   vst1q_f32(&d[x+4], f32_1);
   vst1q_f32(&d[x+8], f32_2);
   vst1q_f32(&d[x+12], f32_3);
} 
Run Code Online (Sandbox Code Playgroud)

这是它生成的代码:

vld1.32 {d18-d19}, [r5]
vneg.f32  q9,q9        <-- GCC intentionally causes stalls
add r7,r7,#16
vld1.32 {d22-d23}, [r8]
add r5,r1,r4
vneg.f32 q11,q11   <-- all of my interleaving is undone (why?!!?)
add r8,r3,#256 …
Run Code Online (Sandbox Code Playgroud)

c gcc arm intrinsics neon

6
推荐指数
1
解决办法
1789
查看次数

NSURL URLByResolvingBookmarkData 似乎随机失败

我的应用程序是 iOS 的图像查看器。我允许用户从相机胶卷或云文件提供商中选择文件。对于选择的每个文件,我创建一个书签,以便用户稍后返回查看该文件,而无需再次执行相机胶卷/云文件选择器的所有步骤。相机胶卷书签始终工作,但云文件提供程序书签会随机失败,因为从调用返回 nil URLByResolvingBookmarkData。返回的错误是:

“文件未找到”

来自 iCloud、DropBox、Box、Google Drive 等的文件会发生这种情况。以下是我创建和检索书签的方法:

// bookmark created from url returned by UIDocumentPickerViewController
NSData *bookmark = [url bookmarkDataWithOptions:options includingResourceValuesForKeys:nil relativeToURL:url error: nil];

// retrieving the URL from this bookmark works for a short time, then returns nil
url = [NSURL URLByResolvingBookmarkData:bookmark options:NSURLBookmarkResolutionWithoutUI relativeToURL:nil bookmarkDataIsStale:&isStale error:&error];
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么书签会工作一段时间,然后就失败了?存储/RAM 有限?

我有一种感觉,答案是从云存储中保留文件的本地副本,因为不能保证它们可以多次访问。

nsurl ios

5
推荐指数
1
解决办法
547
查看次数

EXIF和缩略图

我正在拍摄照片查看器.在这种情况下,我写了一个小类,以便能够读取和使用一些EXIF数据,例如图像方向.这门课程适合阅读.

但是,我会添加一个新选项来旋转照片.我想旋转并写入照片数据本身,而不仅仅是重写方向标签.我已经编写了代码来旋转并保存主JPEG图像,它运行良好.但是我还需要旋转EXIF数据中包含的缩略图(如果有的话),以保持图像的连贯性.出于这个原因,我需要写入EXIF数据,以替换现有的缩略图.

但这提出了一些问题,我在回答时遇到了一些麻烦,即:

  • EXIF数据是否包含多个缩略图,如果是,图像可以包含的最大缩略图数量是多少?
  • 缩略图支持哪些格式?(我发现了JPEG和TIFF,还有其他吗?)
  • 在EXIF标准中是否有任何保证缩略图总是写在后期EXIF数据中,就在主图像之前?
  • 如果不是,则应更新包含指向要替换的缩略图之外的位置的偏移的每个标签.那么,是否有一种标准的方法来遍历所有标签和子目录,识别哪些EXIF标签包含偏移量,并在需要时更新它们?或者唯一的方法是读取最多的标签并仅重写已知的标签?
  • 或者有没有办法保证新旋转的缩略图的大小将小于或等于以前的缩略图大小?

问候

jpeg exif image

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

UDP 数据包转发从 sendmsg 获取 EINVAL

我正在编写我自己的 DNS 黑洞来阻止我家庭网络上的广告和恶意软件。我意识到这种类型的程序已经存在,但我想学习这个过程并编写自己的程序。从 Linux 文档中,似乎可以告诉 sendmsg() 使用不同的返回地址,以便可以转发 UDP 数据包,并且接收服务器会将响应发送给原始请求者而不是我的服务器。从稀疏文档中,我设置了绑定到端口 53 (DNS) 的套接字。我正在接收 DNS 请求,解释它们并在站点被列入黑名单时做出响应。对于“好”域名,我得到了 2 个不同的结果。在 MacOS 上,我发送了转发请求,但响应返回到我的程序而不是原始请求者。在 Linux(Armbian 4.13 内核)上,我从 sendmsg() 调用中获得 EINVAL,但没有发送任何内容。任何人都可以阐明我做错了什么吗?(为简洁起见,已删除所有错误检查)

附加信息...这个方案的一个问题是原始 DNS 请求绑定到 53 以外的套接字端口(显然)。如何告诉 sendmsg() 将响应返回到原始请求的正确端口号?

我的“代理”版本有效。我存储了原始请求的事务 ID 和请求端口号,并且能够成功返回响应

最新消息 - 我能够成功完成我想要的,但没有使用 sendmsg()。通过使用 RAW 套接字并“欺骗”IP 标头中的返回地址,我能够将数据包发送回不同的返回地址和端口号(使用 sendto)。nslookup 认为这是一个问题,但浏览器可以接受。我想我们可以称之为“案件结束”

struct sockaddr_in addr, addrfrom, fwaddr;
socklen_t addrLen = sizeof(struct sockaddr_in);
int rc, listen_sock;

listen_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
rc = 1;
setsockopt(listen_sock, IPPROTO_IP, IP_PKTINFO, &rc, sizeof(rc));
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(53); // port …
Run Code Online (Sandbox Code Playgroud)

linux dns networking udp embedded-linux

2
推荐指数
1
解决办法
960
查看次数

标签 统计

exif ×2

jpeg ×2

arm ×1

c ×1

dns ×1

embedded-linux ×1

extract ×1

gcc ×1

image ×1

intrinsics ×1

ios ×1

linux ×1

neon ×1

networking ×1

nsurl ×1

udp ×1