লিনাক্স কমান্ড লাইন থেকে ছবিতে টাইমস্ট্যাম্প যুক্ত করুন


9

আমার ইমেজ পূর্ণ ফোল্ডার আছে। আমি ফাইলটি তৈরি হওয়ার তারিখের উপর ভিত্তি করে প্রতিটি চিত্রের জন্যই চিত্রটিতে একটি টাইমস্ট্যাম্প যুক্ত করার চেষ্টা করছি। এটা কি সম্ভব? আমি এই পোস্টটি এখানে পড়েছি , তবে এটি এক্সিফ ডেটা ব্যবহার করে। আমার ছবিগুলির এক্সিফ ডেটা নেই।

আমি তৈরি তারিখটি ব্যবহার করে সরাসরি টাইমস্ট্যাম্প যুক্ত করতে পারি? নাকি আমার এক্সিফ ডেটা ব্যবহার করতে হবে? যদি আমাকে এক্সিফ ডেটা ব্যবহার করতে হয় তবে আমি কীভাবে এটি তৈরির তারিখটি ব্যবহার করে লিখব?

আমি জিবিআই ছাড়াই উবুন্টু সার্ভার ব্যবহার করছি, সুতরাং আমার একটি কমান্ড লাইন সমাধান দরকার। কেউ সাহায্য করতে পারেন? ধন্যবাদ!

উত্তর:


18

আপনি যদি ইমেজটিতে চিত্রের তৈরির তারিখটি নিজেই লিখতে চান (এটি যদি আপনি চান না তবে দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন), আপনি ব্যবহার করতে পারেন imagemagick

  1. ইতিমধ্যে ইনস্টল না থাকলে ইমেজম্যাগিক ইনস্টল করুন:

    sudo apt-get install imagemagick
    
  2. বাশ লুপটি চালান যা প্রতিটি ছবি তৈরির তারিখ পাবে এবং ছবিটি সম্পাদনা করতে স্যুট convertথেকে ব্যবহার imagemagickকরবে:

    for img in *jpg; do convert "$img" -gravity SouthEast -pointsize 22 \
       -fill white -annotate +30+30  %[exif:DateTimeOriginal] "time_""$img"; 
    done
    

    নামের প্রতিটি চিত্রের জন্য foo.jpg, time_foo.jpgএটি নীচের ডানদিকে সময় স্ট্যাম্প সহ একটি অনুলিপি তৈরি করবে । একাধিক ফাইলের ধরণের এবং ভাল আউটপুট নামের জন্য আপনি এটি আরও মার্জিতভাবে করতে পারেন তবে বাক্য গঠনটি আরও জটিল:

ঠিক আছে, এটি ছিল সহজ সংস্করণ। আমি এমন একটি স্ক্রিপ্ট লিখেছিলাম যা আরও জটিল পরিস্থিতি, উপ ডিরেক্টরিগুলির ফাইলগুলি, অদ্ভুত ফাইলের নাম ইত্যাদির সাথে মোকাবিলা করতে পারে As যতদূর আমি জানি কেবলমাত্র .png এবং .if চিত্রগুলিতে এক্সআইএফ ডেটা থাকতে পারে তাই অন্য ফর্ম্যাটে এটি চালানোর কোনও মানে নেই this । তবে, সম্ভাব্য কাজ হিসাবে আপনি EIF ডেটার পরিবর্তে ফাইলের তৈরি তারিখটি ব্যবহার করতে পারেন। চিত্রটি যে তারিখটি তোলা হয়েছে তার তুলনায় এটি খুব সম্ভবত একই নয় তবে নীচের স্ক্রিপ্টটিতে সংশ্লিষ্ট বিভাগটি মন্তব্য করেছে। আপনি যদি এইভাবে প্রক্রিয়া করতে চান তবে মন্তব্যগুলি সরান।

এই স্ক্রিপ্টটি সংরক্ষণ করুন add_watermark.shএবং আপনার ফাইলগুলি যে ডিরেক্টরিতে রয়েছে তা চালান:

bash /path/to/add_watermark.sh

এটি আপনার ব্যবহার exiv2করতে পারে যা ব্যবহার করে ( sudo apt-get install exiv2)। এই পান্ডুলিপি:

#!/usr/bin/env bash

## This command will find all image files, if you are using other
## extensions, you can add them: -o "*.foo"
find . -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.tif" -o \
 -iname "*.tiff" -o -iname "*.png" | 

## Go through the results, saving each as $img
while IFS= read -r img; do
    ## Find will return full paths, so an image in the current
    ## directory will be ./foo.jpg and the first dot screws up 
    ## bash's pattern matching. Use basename and dirname to extract
    ## the needed information.
    name=$(basename "$img")
    path=$(dirname "$img")
    ext="${name/#*./}"; 

    ## Check whether this file has exif data
    if exiv2 "$img" 2>&1 | grep timestamp >/dev/null 
    ## If it does, read it and add the water mark   
    then
    echo "Processing $img...";
    convert "$img" -gravity SouthEast  -pointsize 22 -fill white \
             -annotate +30+30  %[exif:DateTimeOriginal] \
             "$path"/"${name/%.*/.time.$ext}";
    ## If the image has no exif data, use the creation date of the
    ## file. CAREFUL: this is the date on which this particular file
    ## was created and it will often not be the same as the date the 
    ## photo was taken. This is probably not the desired behaviour so
    ## I have commented it out. To activate, just remove the # from
    ## the beginning of each line.

    # else
    #   date=$(stat "$img" | grep Modify | cut -d ' ' -f 2,3 | cut -d ':' -f1,2)
    #   convert "$img" -gravity SouthEast  -pointsize 22 -fill white \
    #          -annotate +30+30  "$date" \
    #          "$path"/"${name/%.*/.time.$ext}";
    fi 
done

আমি ঠিক তাই খুঁজছি! যাইহোক, আমি নিম্নলিখিত আউটপুটটি পাচ্ছি: convert.im6: unknown image property "%[exif:DateTimeOriginal]" @ warning/property.c/InterpretImageProperties/3245. convert.im6: unable to open image `{img/%.*/.time.jpg}': No such file or directory @ error/blob.c/OpenBlob/2638.এছাড়াও, আমি সিদ্ধান্ত নিয়েছি না যে আমি এখনও সাব-ডিরেক্টরি ব্যবহার করতে চাইছি; আপনি কিভাবে ব্যবহার করতে পারেন তা প্রদর্শন করতে পারেন find? ধন্যবাদ!
অ্যান্ড্রু

@ এবং দুটি সম্ভাব্য সমস্যা রয়েছে, একটি হ'ল আমি ভেরিয়েবলগুলি সঠিকভাবে উদ্ধৃত করিনি এবং তাই ফাইলের নামগুলির ফাঁকা স্থান সমস্যার কারণ হতে পারে। আপডেট হওয়া উত্তরে স্ক্রিপ্টটি ব্যবহার করে দেখুন। এটি এখনও ব্যর্থ হলে আপনার চিত্রগুলিতে সম্ভবত প্রয়োজনীয় এক্সআইএফ ডেটা না রয়েছে, আমি তার জন্য একটি (খারাপ) কাজ অন্তর্ভুক্ত করেছি।
টেরডন

এটি একটি সময় হয়েছে, কিন্তু আপনি কি ব্যাখ্যা করতে পারেন "$path"/"${name/%.*/.time.$ext}"? বিশেষত, /%.*/অংশ। এছাড়াও, যদি আমি "সময়" অংশটি সামনে রাখতে চাইতাম, যেমন সময়.এ.জেপিজি, a.time.jpg এর পরিবর্তে, আমি কীভাবে এটি করতে পারি?
অ্যান্ড্রু

@ অ্যান্ড্রু যে ঠিক স্ট্রিং প্রতিস্থাপন, এখানে দেখুন । এটি সর্বশেষ .চরিত্রটির পরে সমস্ত কিছু প্রতিস্থাপন করবে .time.$ext( $extএটি পূর্বে গৃহীত এক্সটেনশনটি)। এটিকে তৈরি করতে time.a.jpg, এতে পরিবর্তন করুন ${name/#/time.}
টেরডন

-পয়েন্টসাইজ 48 বা -পয়েন্টসাইজ 72 অবশ্যই আরও সুগঠিত। :-)
কোরি এস।

0

দয়া করে খুঁজে বার করো http://jambula.sourceforge.net/ বিভিন্ন বিন্যাস ও ভাষায় কোন JPEG ইমেজ উপর তারিখ / সময় / মন্তব্য শুটিং সন্নিবেশ ব্যাচ করতে। একটি বিশেষ বৈশিষ্ট্য হ'ল তারিখের স্ট্যাম্পটি নিখরচায়। এটি লিনাক্স এবং ম্যাকেও সমর্থিত।


0

খালি ডিরেক্টরিতে ফাইল প্লট করুন, এবং শেল করতে AWK টি পাইপ করুন। সম্ভবত কিছুটা ওল্ডস্কুল তবে অনেক কম অভিনব প্যান্ট, টাইপ করার জন্য অনেক কম অক্ষর যেমন:

ls | awk '{print "convert "$0" -gravity SouthEast -pointsize 22 -fill white -annotate +30+30 %[exif:DateTimeOriginal] dated"$0}' | sh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.