كود php المقترح لقراءة تصنيف الملف الذي تم تعيينه بواسطة Adobe Bridge CS3

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

سؤال

خلفية: لقد كنت أحاول قراءة التصنيف الذي تم تعيينه في Adobe Bridge CS3 باستخدام مجموعة أدوات البيانات الوصفية للمشاعات الإبداعية الخاصة بـ php ولكن دون جدوى.أنا أستخدم الاستضافة المشتركة لذا ليس لدي فرصة لإعادة ترجمة PHP باستخدام وحدات مختلفة.

هل يتوفر كود php يمكن استخدامه لقراءة التصنيف المضمن في ملف .jpg؟لقد قرأت أن هذا قسم بتنسيق xmp (xml) داخل الملف.

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

المحلول

أقوم بنشر الحل الخاص بي هنا في حالة وجود مشكلة مماثلة لدى شخص آخر وقراءة هذا الموضوع.وهنا ما وجدت:
ويندوز فيستا أضف التصنيف إلى قسم exif المضمن في الملف
أدوبي بريدج يضيف قسمًا آخر إلى ملف jpg الذي يحتوي على بيانات منسقة بتنسيق xml.يُشار إلى بنية بيانات xml + بالملف xmp.لم أقم بعد بمعالجة الملف باستخدام Adobe Bridge، ولهذا السبب لم أتمكن من قراءة بيانات xmp باستخدام مجموعة أدوات البيانات الوصفية.

باستخدام مجموعة أدوات المشاع الإبداعي - البيانات الوصفية، تمكنت من قراءة التقييمات باستخدام الكود التالي.هذا الكود جزء من وحدة دروبال، وبعض المتغيرات المشار إليها هي إعدادات دروبال:variable_get() هي دالة دروبال لقراءة متغير من مخزن بيانات مستمر.

include_once("PHP_JPEG_Metadata_Toolkit_1.11/JPEG.php");
  include_once("PHP_JPEG_Metadata_Toolkit_1.11/Photoshop_File_Info.php");
  include_once("PHP_JPEG_Metadata_Toolkit_1.11/EXIF.php");
  include_once("PHP_JPEG_Metadata_Toolkit_1.11/XMP.php");

  $photodir = variable_get('rotate_images_sourcefiles_dir',"sites/default/files/imageNodes");

  $rating_threshold = variable_get('rotate_images_rating_threshold',3);
  $allImages=dir($photodir);
  $filenames = scandir($photodir);

  foreach($filenames as $filename){

    $rating = null;
    $info = pathinfo($filename);
    if (strtolower($info['extension'])=="jpg"){
      //  First try to get the rating from the EXIF data, this is where it is stored by Windows Vista
      $exif = get_EXIF_JPEG( $photodir . "/" . $filename );
      $rating = $exif[0][18246]['Data'][0];

      $jpeg_header = get_jpeg_header_data($photodir . "/" . $filename );
      //  If no rating was found in the EXIF data, it may be in the Adobe format xmp section
      if ($rating == null){
        if($jpeg_header != false){
          $xmp = get_XMP_text($jpeg_header);
          $xmpArray = read_XMP_array_from_text($xmp);
          $rating = $xmpArray[0]['children'][0]['children'][0][attributes]['xap:Rating'];
        }   
      }
    }
  }

لقد كنت بحاجة إلى تعديل EXIF_Tags.php ملف في مجموعة أدوات البيانات التعريفية عن طريق إضافة إدخال إضافي إلى مجموعة علامات EXIF.لقد أبلغت المؤلف بهذا، لكنني لا أعتقد أنه يحافظ على الوحدة بعد الآن.المصدر موجود على موقع sourceforge، لكني لا أعرف كيفية نشر التصحيح.لذلك قد تحتاج إلى إجراء التغيير على EXIF.php بنفسك حتى تعمل التعليمات البرمجية.

'EXIF' => array (

// Exif IFD

18246 => array ( 'Name' => "Rating",
                'Type' => "Numeric" ), 

نصائح أخرى

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

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