كيف يمكنني الحصول على الملفات بتنسيق الملف الخاص بي ليكون لها رمز ديناميكي خاص بها؟

StackOverflow https://stackoverflow.com/questions/120865

  •  02-07-2019
  •  | 
  •  

سؤال

يحتوي تطبيقنا على تنسيق ملف مشابه لتنسيق ملف OpenDocument (انظر http://en.wikipedia.org/wiki/OpenDocument) - أي.مضغوط بملف بيان وصورة مصغرة وما إلى ذلك.

لاحظت أن ملفات OpenOffice تحتوي على صورة معاينة لملف Open Office كأيقونات لها، في كل من Windows وLinux.هل هناك طريقة ما لتحقيق ذلك لملفاتنا:أي.أريد رمزًا ديناميكيًا يعتمد على الصورة المصغرة الداخلية.png؟

تحرير 1 واو، شكرا لجميع الإجابات السريعة. الصورة المصغرة تبدو رائعة بالنسبة لعالم جنوم.Windows سأبحث في هذه الروابط، شكرًا.أما بالنسبة لسؤال التعليق:برمجياً أو عبر برنامج التثبيت الخاص بنا.

تحرير 2 اه نسيت ماكماذا عن ماك؟(عذرًا لمحبي Mac!) هل هناك أيضًا أي روابط أو معلومات حول كيفية قيام OpenOffice بأشياء IconHandler الخاصة بهم - نظرًا لأن منتجاتنا ستكون متشابهة جدًا؟

هل كانت مفيدة؟

المحلول

شبابيك

ما تحتاجه هو معالج الأيقونات, ، المعروف أيضًا باسم معالج الصور المصغرة.فيما يلي مثال مكتوب كـ التحكم x النشط.

مصدر آخر هو البحث عن معالجو الممتلكات, ، والذي يجب أن يوجهك أيضًا إلى أحدث وأكبر طريقة للتعامل مع بيانات التعريف الديناميكية بشكل صحيح في Windows.

هؤلاء هم متحرك الحلول - ليست هناك حاجة إليها إذا كنت تريد فقط رمزًا مرتبطًا بجميع ملفاتك - يتم استخدامها فقط عندما تريد أن يعرض مستكشف Windows رمزًا بناءً على ما هو موجود في الملف، وليس فقط الامتداد، وعندما يتغير الملف يتم تحديث الرمز ليعكس التغييرات.ليس من الضروري أن تكون صورة للملف نفسه، حيث يمكن لمعالج الصور المصغرة إنشاء أي صورة بناءً على محتويات الملف.

يقوم معالج الخاصية بتحديث البيانات التعريفية الأخرى، مثل طول الأغنية أو الفيديو، بحيث يمكنك استخدام كافة البيانات التعريفية التي يدعمها Windows Explorer.

فيما يتعلق بدعم MAC، هذه الصفحة يقول: "لدى أنظمة التشغيل Mac وWindows طرق مختلفة لتمكين هذا النوع من الصور المصغرة، وفي حالة نظام التشغيل Mac، كان هذا الدعم غير متسق من إصدار إلى آخر، لذا لم تتم متابعته [في Adobe InDesign]. "

نظام التشغيل العاشر

يتم تحديد أيقونات نظام التشغيل Mac OSX بواسطة إطلاق قاعدة بيانات الخدمات.ومع ذلك، فهو يشير إلى ملف رمز ثابت لجميع الملفات التي يعالجها تطبيق مسجل (لا يعتمد على الامتداد - كل ملف يحتوي على بيانات تعريف مرفقة تحدد التطبيق الذي ينتمي إليه، على الرغم من أن الامتدادات تعطي تلميحات عندما لا تكون بيانات التعريف موجودة موجود، مثل الحصول على الملف من نظام تشغيل أو نظام ملفات مختلف)

يبدو أن وظيفة الأيقونة الديناميكية في OSX يتم توفيرها بواسطة Finder، لكن عمليات البحث لا تقدم أي مؤشرات سهلة في هذا الاتجاه.نظرًا لأن Finder يتغير بمرور الوقت، أستطيع أن أرى سبب صعوبة تحقيق هذا الهدف...

جنوم

بالنسبة لجنوم تستخدم ملف مصغر.(شكرًا دوروارد)

هذا برنامج بسيط للغاية تكتبه، ويحتوي على 3 وسائط لسطر الأوامر:

  • اسم ملف الإدخال، الملف الذي تصفه بالصورة المصغرة (أو URI إذا قبلت ذلك بدلاً من ذلك)
  • اسم ملف الإخراج، حيث تحتاج إلى كتابة PNG
  • الحجم، وهو رقم بالبكسل يصف الحد الأقصى لحجم الصورة المربعة التي يجب أن تنتجها (128 --> 128x128 أو أصغر)

أتمنى أن تكون جميع الأنظمة بهذه البساطة.ومن ناحية أخرى، لا يدعم هذا الرسوم المتحركة وبعض الميزات الأخرى التي توفرها المكونات الإضافية الأكثر صعوبة في التنفيذ على الأنظمة الأخرى.

كيدي

أنا غير متأكد بعض الشيء، ولكن هناك بعض المؤشرات التي يجب أن تساعدك على البدء.الأول هو أن Konqueror هو مدير الملفات ويعرض الأيقونات - فهو يدعم الأيقونات الديناميكية لبعض الأنواع المضمنة، لكنني لا أعرف ما إذا كانت هذه مضمنة أو مكونات إضافية يمكنك كتابتها.تفحص ال المكونات المضمنة البرنامج التعليمي لنقطة البداية.

هناك ميزة جديدة (أو ميزة مخطط لها...) تسمى Plasma والتي لها علاقة كبيرة بالأيقونات ووظائف الرموز.الدفع هذا الإعلان و هذا التنفيذ الأولي.

قد تحتاج إلى البحث في مصدر Konqueror والتحقق من كيفية قيامهم بذلك بالنسبة للملفات النصية والملفات الأخرى التي تم تنفيذها بالفعل.

-آدم

نصائح أخرى

Mac OSX منذ الإصدار 10.5...

… له نهجان:

  1. المستند الخاص بك بتنسيق حزمة OSX القياسي ويحتوي على صورة ثابتةيمكن القيام بذلك عن طريق إنشاء مجلد فرعي QuickLook ووضع Thumbnail/Preview.png/tiff/jpg بداخله.

  2. كل شيء آخر يحتاج إلى مكون إضافي لمولد QuickLook والذي يمكن تخزينه في /Library/QuickLook ~/Library/QuickLook أو داخل مجلدات YourApp.app/Contents/Library/QuickLook.

يتم استخدام هذا المولد لإنشاء معاينات الصور المصغرة وQuickLook بسرعة.يقدم XCode نموذجًا لذلك.القالب يولد ما هو مطلوب أنسي ج الملفات التي يجب تنفيذها.إذا كنت تريد أن تكتب الكائن-C يجب عليك إعادة تسمية GenerateThumbnailForURL.ج وGeneratePreviewForURL.ج لإنشاء ThumbnailForURL.م وGeneratePreviewForURL.م (واقرأ مستندات Apple Devel بعناية؛))


عرض توضيحي بسيط يعتمد على حاوية مضغوطة:

سيتعين عليك إضافة cocoa.framework و foundation.

#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;
}

معلومات.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>

سيؤدي هذا إلى تسجيل نوع الملف الخاص بك $fileExt$ وإخبار النظام أن نوع الملف الخاص بك هو نوع تنسيق zipy.المرجع الجميل الذي استخدمته هنا هو البرنامج المساعد QuickLook IPA من googlecode

في نظام التشغيل Windows، ما تحتاجه هو تنفيذ Icon Handler.لقد فعلت ذلك منذ عدة أشهر، وهو ليس بالأمر الصعب طالما أنك تعرف أساسيات COM.

يرى: http://msdn.microsoft.com/en-us/library/bb776857(VS.85).aspx

بالنسبة لجنوم تستخدم ملف مصغر.

هذا الأمر متروك لنظام التشغيل، على حد علمي، وسيعتمد على امتداد الملف.

بالنسبة لـ WINDOWS جرب هذا:

http://www.easydesksoftware.com/news/news12.htm

تحتوي الملفات التنفيذية على أيقونة داخل الملف (من المحتمل أن تكون متعددة) باعتبارها "موردًا".

تلتقط ملفات البيانات رمزًا بناءً على اقتران الملف.

إذا كنت تريد رمزًا مخصصًا لكل ملف فهذا أصعب بكثير.إما أنك تحتاج إلى خداع نظام التشغيل للاعتقاد بأنه ملف قابل للتنفيذ وتضمين الرمز كمورد في الملف، أو ربط عميق في نظام التشغيل لتجاوز روتين اختيار الرمز الافتراضي.

أعتقد أن أيقونة "الخاصة المخصصة" يمكن أن تحتوي على ملفات PE فقط في النوافذ.يتم تخزين كل الرموز الأخرى لامتدادات الملفات في سجل Windows.

للحصول على مواصفات ملف PE، يمكنك إلقاء نظرة على نظرة متعمقة على تنسيق الملف القابل للتنفيذ Win32 و التناظر داخل PE:جولة في تنسيق الملف القابل للتنفيذ المحمول Win32.

كيف يعمل في أنظمة التشغيل الأخرى، لا أعرف :/.

لا أعرف شيئًا عن نظام التشغيل Linux، لكن بالنسبة لنظام التشغيل Windows، يمكنك البدء من هنا:http://msdn.microsoft.com/en-us/library/bb774614.aspx

يحرر: أعتقد أن هذه الواجهة مخصصة للصور المصغرة التي تظهر في عرض الصور المصغرة، وليس للأيقونات.آسف لإضاعة وقتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top