我怎么得到的文件,在我自己的文件格式有其自己的动态图标?
-
02-07-2019 - |
题
我们的应用程序都有一个文件格式类似于OpenDocument文件格式(见 http://en.wikipedia.org/wiki/OpenDocument)-即拉链有一个清单文件的缩略图像,等等。
我注意到,OpenOffice文件有一个预览的图像打开办公室的文件为他们的图标,既在Windows和Linux。是否有某种方式来完成,这对于我们的文件:即我想要一个动态标基于内部的略图。png?
编辑1 哇,感谢对于所有快速解答。 Thumbnailer 看起来很棒,用于侏儒的世界。Windows我会找到那些链接,谢谢。至于评论问题:编程方式或通过我们的安装。
编辑2 哦,忘了Mac。怎么样的吗?(抱歉Mac爱好者!) 还有任何联系或信息,对于如何OpenOffice他们IconHandler的东西-因为我们将非常相似的?
解决方案
Windows
什么你需要的是一个 图标的处理程序, 也称为缩略处理程序。这里是一个例子写作 活动的控制x.
另一种资源是看起来 财产处理程序, 还应点到你的最新和最伟大的方式的具有动态的元数据正确处理在窗。
这些都是 动态 解决方案--它们不需要如果你只是想要一个图标相关的所有文件-它们只是用来当你想windows资源管理显示图标的基础上什么在文件,而不仅仅是扩展,并且当的文件变化的图标是更新以反映变化。它不必是一个图像的文件本身,无论是,缩略处理程序可以生成的任何基于图像的文件内容。
财产处理程序更新的其他元数据,例如歌曲或视频的长度,因此可以使用的所有元数据Windows资源管理器的支持。
关于MAC支持, 这页 说,"Mac和Windows操作系统具有不同的方法使这种类型的缩略,并且在的情况下Mac OS,这种支持已经不一致的版本,所以它没有开展[for Adobe可少的]."
OS X
图标for Mac OS x是确定的 发射服务的数据库.然而,它指的是一个静态的图标文件的所有文件处理由于已登记的程序(这是基于不扩-每个文件有元数据的连接,确定应用到其所属的,虽然扩展给的提示当的元数据并不存在,例如获取的文件从一个不同的操作系统或文件系统)
它出现的动态标的功能在OS x提供搜索,但是搜索不会带来任何简单指向这个方向。由于搜索的不断变化随着时间的推移,我可以看到为什么这个目标很难打...
侏儒
Gnome你使用 thumbnailer.(谢谢 Dorward)
这是一个非常简单的程序,你写信,其中有3命令行参数:
- 输入文件的名称,该文件描述了与缩略(或URI如果你接受这些代替)
- 输出的文件的名字,你在哪里需要写的PNG
- 尺寸,一些像素描述的最大广场图像的大,你应该产生(128-->128×128或更小)
我希望所有系统都这么简单。另一方面,这并不支持的动画和其他一些功能,是提供更加难以实现的插件对其他系统。
KDE
我有点不确定,但有一些指针,应该让你开始。第一是,到的是文件管理和显示器的图标-它支持动态的图标,为一些内置的类型,但是我不知道如果这些是硬编码,或插件你可以写。检查出来的 嵌入式组件教程 对于一个起点。
有一个新的(ish?) 功能(或计划的功能...)称为等离子体有大量工作要做的图标和标的功能。检查了 这个公布违反 和 这一初步执行情况.
你可能需要深入的来源,通,并检查了他们是如何做到这一文本的文件和其他已经实施。
-亚当
其他提示
自10.5版以来的Mac OSX <!>#8230;
<!>#8230;有两种方法:
-
您的文档采用标准OSX捆绑包格式,并具有静态图片 这可以通过创建一个子文件夹QuickLook并将Thumbnail / Preview.png / tiff / jpg放在里面来完成。
-
其他所有需要一个QuickLook生成器插件,该插件可以存储在/ Library / QuickLook~ / Library / QuickLook或YourApp.app/Contents/Library/QuickLook文件夹中。
醇>
此生成器用于动态创建缩略图和QuickLook预览。 XCode为此提供了一个模板。该模板生成必须实现的所需 ANSI C 文件。如果您要编写 Object-C 代码,则必须将GenerateThumbnailForURL。 c 和GeneratePreviewForURL。 c 重命名为GenerateThumbnailForURL。 m 和GeneratePreviewForURL。 m (并仔细阅读Apple Devel Docs;)
基于简单zip容器的演示:
您必须将Cocoa.framework和Foundation.framework添加到您的项目中 在您的GenerateThumbnailForURL.c中(这部分不在我的脑海中 - 所以不能保证它开箱即用;)):
#include <Cocoa/Cocoa.h>
#include <Foundation/Foundation.h>
OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
/* unzip the thumbnail and put it into an NSData object */
// Create temporary path and writing handle for extraction
NSString *tmpPath = [NSTemporaryDirectory() stringByAppendingFormat: [NSString stringWithFormat: @"%.0f.%@" , [NSDate timeIntervalSinceReferenceDate] * 1000.0, @"png"]];
[[NSFileManager defaultManager] createFileAtPath: tmpPath contents: [NSData alloc] attributes:nil];
NSFileHandle *writingHandle = [NSFileHandle fileHandleForWritingAtPath: tmpPath];
// Use task to unzip - create command: /usr/bin/unzip -p <pathToFile> <fileToExtract>
NSTask *unzipTask = [[NSTask alloc] init];
[unzipTask setLaunchPath: @"/usr/bin/unzip"];
// -p -> output to StandardOut, added File to extract, nil to terminate Array
[unzipTask setArguments: [NSArray arrayWithObjects: @"-p", [(NSURL *) url path], @"Thumbnails/thumbnail.png", nil]];
// redirect standardOut to writingHandle
[unzipTask setStandardOutput: writingHandle];
// Unzip - run task
[unzipTask launch];
[unzipTask waitUntilExit];
// Read Image Data and remove File
NSData *thumbnailData = [NSData dataWithContentsOfFile: tmpPath];
[[NSFileManager defaultManager] removeFileAtPath: tmpPath handler:nil];
if ( thumbnailData == nil || [thumbnailData length] == 0 ) {
// Nothing Found. Don't care.
[pool release];
return noErr;
}
// That is the Size our image should have - create a dictionary too
CGSize size = CGSizeMake(256, 256);
NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:size.width],kQLPreviewPropertyWidthKey,
[NSNumber numberWithInt:size.height],kQLPreviewPropertyHeightKey,
nil];
// Get CGContext for Thumbnail
CGContextRef CGContext = QLThumbnailRequestCreateContext(thumbnail, size, TRUE, (CFDictionaryRef)properties);
if(CGContext) {
NSGraphicsContext* context = [NSGraphicsContext graphicsContextWithGraphicsPort:(void *)CGContext flipped:size.width > size.height];
if(context) {
//These two lines of code are just good safe programming…
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:context];
NSBitmapImageRep *thumbnailBitmap = [NSBitmapImageRep imageRepWithData:thumbnailData];
[thumbnailBitmap draw];
//This line sets the context back to what it was when we're done
[NSGraphicsContext restoreGraphicsState];
}
// When we are done with our drawing code QLThumbnailRequestFlushContext() is called to flush the context
QLThumbnailRequestFlushContext(thumbnail, CGContext);
// Release the CGContext
CFRelease(CGContext);
}
[pool release];
return noErr;
}
的Info.plist
你也必须修改你的info.plist文件 - 当你打开它时,它预先设置了很多字段。他们中的大多数是自我解释(或不必更改)但我必须添加以下结构(复制粘贴应该 - 复制文本,进入plist编辑器,然后粘贴。):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>com.pkware.zip-archive</string>
</array>
<key>UTTypeDescription</key>
<string>i-net Crystal-Clear Report File</string>
<key>UTTypeIconName</key>
<string>generic</string>
<key>UTTypeIdentifier</key>
<string>com.company.product</string>
<key>UTTypeReferenceURL</key>
<string>http://your-url.com</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>$fileEXT$</string>
</array>
</dict>
</dict>
</array>
</plist>
这将注册您的filetype $ fileExt $并告诉系统您的文件类型是压缩格式类型。我在这里使用的一个很好的参考是来自googlecode的 QuickLook IPA插件
在Windows中,您需要实现一个图标处理程序。我之前做了很多这个月,只要你了解COM的基础知识就不难了。
请参阅: http://msdn.microsoft。 COM / EN-US /库/ bb776857(VS.85)的.aspx
对于Gnome,您使用缩略图。
据我所知,这取决于操作系统,它将基于文件扩展名。
对于WINDOWS试试这个:
可执行文件在文件中有一个图标(可能是多个)作为<!>“;资源<!>”;
数据文件根据文件关联选择一个图标。
如果您希望每个文件的自定义图标更难。你要么太傻了,操作系统认为它是一个可执行文件,并将图标作为资源嵌入到文件中,或深入链接到操作系统以覆盖默认的图标选择例程。
我认为,<!>“自定义<!>”;图标只能在Windows中有PE文件。文件扩展名的每个其他图标都存储在Windows注册表中。
有关PE文件的规范,您可以查看深入了解进入Win32可移植可执行文件格式和在PE内窥视:A浏览Win32可移植可执行文件格式。
在其他操作系统中如何工作,我不知道:/。
我不了解Linux,但对于Windows,您可以从这里开始: http://msdn.microsoft.com/en-us/library/bb774614。 ASPX
编辑:我认为此界面适用于缩略图视图中显示的缩略图,而不是图标。抱歉浪费你的时间。