স্ক্রিপ্ট সহ জেপিজি এবং পিএনজি-র মধ্যে পছন্দটি স্বয়ংক্রিয় করা


4

আপনার চিত্রগুলিকে সংরক্ষণ করতে সঠিক ফর্ম্যাট নির্বাচন করা চিত্রের মান সংরক্ষণ এবং নিদর্শনগুলি হ্রাস করার জন্য অত্যন্ত গুরুত্বপূর্ণ। বিভিন্ন ফর্ম্যাট বিভিন্ন সংকোচনের পদ্ধতি অনুসরণ করে এবং তাদের নিজস্ব সুবিধা এবং অসুবিধাগুলির সেট নিয়ে আসে।

উদাহরণস্বরূপ, জেপিজি বাস্তব জীবনের ফটোগ্রাফগুলির জন্য উপযুক্ত যা রঙের গ্রেডিয়েন্টে সমৃদ্ধ। অন্যদিকে লসলেস পিএনজি তুলনামূলকভাবে উচ্চতর হয় যখন এটি পরিকল্পনামূলক পরিসংখ্যানগুলির ক্ষেত্রে আসে:

এখানে চিত্র বর্ণনা লিখুন

বিপুল সংখ্যক ফাইলের সাথে কাজ করার সময় সঠিক বিন্যাসটি বাছাই করা এক কাজকর্ম হতে পারে। এজন্য আমি এটি স্বয়ংক্রিয় করার কোনও উপায় খুঁজে পেতে চাই love


আমার নির্দিষ্ট ব্যবহারের ক্ষেত্রে কিছুটা পটভূমি:

আমি আমার বিপর্যয় নিয়ে ধারাবাহিক বক্তৃতার জন্য বেশ কয়েকটি হ্যান্ডআউটে কাজ করছি। হ্যান্ডআউটগুলি পরিসংখ্যান সমৃদ্ধ, যা আমাকে পিডিএফ-ফর্ম্যাট করা স্লাইডগুলি থেকে বের করতে হবে। এই চিত্রগুলি সরানো আমাকে ক্ষতির অযোগ্য পিএনজি দেয় যা অনেক সময় অযথা বড় হয়।

এই নির্দিষ্ট ফাইলগুলিকে জেপিজিতে রূপান্তর করা একই মান বজায় রেখে তাদের আকারের মূল ফাইলের আকারের 20% এরও কম করতে পারে। ওয়ার্ড প্রসেসরগুলিতে শত শত বৃহত চিত্রের সাথে কাজ করা বেশ ক্রাশ-প্রবণ হিসাবে এটি গুরুত্বপূর্ণ।

সমস্ত নিষ্কাশিত পিএনজিকে জেপিজিতে রূপান্তর করা ব্যাচ এমন কোনও বিকল্প নয় যা আমি অনুসরণ করতে ইচ্ছুক, কারণ বেশিরভাগ চিত্র যদি পিএনজি হিসাবে ফর্ম্যাট করার জন্য উপযুক্ত না হয়। এগুলিকে রূপান্তর করার ফলে আকারের হ্রাস হ্রাস হতে পারে এবং কখনও কখনও ফাইলসাইজও বৃদ্ধি পায় - এটি আমার পরীক্ষার রানগুলি অন্তত যা দেখায়।


আমরা এটি থেকে যা নিতে পারি তা হ'ল সংকোচনের পরে ফাইলের আকারটি কোনও নির্দিষ্ট চিত্রের জন্য কোন ফর্ম্যাটকে সবচেয়ে উপযুক্ত suited তার একটি সূচক হিসাবে কাজ করতে পারে। এটি বিশেষ করে সঠিক ভবিষ্যদ্বাণীকারী নয়, তবে যথেষ্ট পরিমাণে কাজ করে। সুতরাং কেন এটি কোনও স্ক্রিপ্ট আকারে ব্যবহার করবেন না:

এখানে চিত্র বর্ণনা লিখুন

আমি ইনোটাইফয়েট অন্তর্ভুক্ত করেছি কারণ আমি কোনও ফোল্ডারে কোনও নিষ্কাশিত চিত্র টেনে নিলেই স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে কার্যকর করা পছন্দ করব।

এটি স্ক্রিপ্টটির একটি সহজ সংস্করণ যা আমি গত কয়েক সপ্তাহ ধরে ব্যবহার করছি:

#!/bin/bash
inotifywait -m --format "%w%f" --exclude '.jpg' -r -e create -e moved_to --fromfile '/home/MHC/.scripts/Workflow/Conversion/include_inotifywait' | while read file; do mogrify -format jpg -quality 92 "$file"
done

স্ক্রিপ্টের উন্নত সংস্করণটি করতে হবে

  • ফাইলের নাম এবং ডিরেক্টরি নামের জায়গাগুলি পরিচালনা করতে সক্ষম হন
  • মূল ফাইলের নাম সংরক্ষণ করুন
  • একটি আলফা মান সেট করা থাকলে পিএনজি চিত্রগুলি সমতল করুন
  • অস্থায়ী রূপান্তরিত চিত্র এবং এর আসলটির মধ্যে ফাইলের আকারের তুলনা করুন
  • পার্থক্য প্রদত্ত প্রেজেন্টেজের চেয়ে বেশি কিনা তা নির্ধারণ করুন
  • সেই অনুযায়ী কাজ

আসল রূপান্তরটি ইমেজম্যাগিক সরঞ্জামগুলির সাহায্যে করা যেতে পারে:

convert -quality 92 -flatten -background white file.png file.jpg

দুর্ভাগ্যক্রমে, আমার বাশ দক্ষতা উপরের স্কিমটিকে একটি সত্য স্ক্রিপ্টে রূপান্তর করতে যথেষ্ট উন্নততার কাছাকাছিও নয়, তবে আমি নিশ্চিত যে আপনারা অনেকেই পারেন।

এখানে আমার খ্যাতি পয়েন্টগুলি বেশ কম, তবে আমি নির্ধারিত সর্বোচ্চ অনুগ্রহের সাথে সানন্দে সবচেয়ে কার্যকর উত্তরটি দেব।

তথ্যসূত্র: http://www.forortals.com/introducing-cnb-imageguide/ , http://www.turnkeylinux.org/blog/png-vs-jpg

সম্পাদনা : এছাড়াও আমার মনে হয় যে এই স্ক্রিপ্টটি আমি যে সমস্যার মুখোমুখি হচ্ছি তার সেরা সমাধান কেন আমি এই বিষয়ে আরও তথ্যের জন্য নীচে আমার মন্তব্যগুলি দেখুন।


বিশেষজ্ঞ নন, তাই আমি সোডিয়াম ক্লোরাইডের একটি স্বাস্থ্যকর ডোজ দিয়ে যা বলি তা গ্রহণ করুন: আমি মনে করি আপনি ফটোগ্রাফগুলি পরিচালনা করার জন্য পিএনজির সক্ষমতাটিকে হ্রাস করছেন। আপনি যে ধরণের গ্রেডিয়েন্ট ইস্যুগুলি চিত্রিত করেছেন সেগুলি বিন্যাসের অভ্যন্তরীণ বৈশিষ্ট্য নয়, একটি সফ্টওয়্যার আর্টিফ্যাক্ট বলে মনে হচ্ছে। আপনি জেপিইজি 2000 ব্যবহার করার বিষয়টিও বিবেচনা করতে পারেন , এটি এমন একটি ফর্ম্যাট যা জেপিগের কিছু ত্রুটিগুলিকে সম্বোধন করে।
আইজাক রবিনোভিচ

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

উত্তর:


1

পিডিএফ লসলেস এনকোডিং এবং জেপিইজি এনকোডিং উভয়কেই সমর্থন করে। (জেপিজি 2000 এছাড়াও।) আপনি সম্ভবত এমন একটি সরঞ্জাম চাইবেন যা পিডিএফ থেকে সরাসরি চিত্রের ডেটা বের করে এবং এটি যেমন রেখে দেয়। এক্সপিডিএফ প্যাকেজ থেকে পিডিফাইমেজগুলি এটি করবে।

ইমেজম্যাগিক আসলে পুরো পৃষ্ঠাটি রেন্ডার করে এটিকে বের করে আনবে। এটি ইতিমধ্যে পিডিএফ-এ সঞ্চিত এনকোডিংয়ের পছন্দটিকে বাতিল করে দেয় এবং এই কাজটি করার সর্বোত্তম উপায় নয়।


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

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

আপনি কি নিশ্চিত যে সমস্ত চিত্র তোলার জন্য এটি ব্যবহারিক নয়, তারপরে সেগুলি অন্য প্রোগ্রামে বাছাই করুন? এমনকি যদি এক্সপিডিএফ আপনার জন্য কাজ না করে, পিডিফাইমেজগুলি (যা xpdf-utils প্যাকেজে রয়েছে)। এটি সম্ভবত সফ্টওয়্যার পিডিএফ তৈরি করেছে তার উপর নির্ভর করে পিডিএফের সংক্ষেপণটি ভাল। তবে রঙের সংখ্যার উপর ভিত্তি করে সেরা ফর্ম্যাট নির্ধারণ করার একটি উপায় থাকতে পারে। (বা, এটি উভয়ভাবে সংকুচিত করার জন্য একটি স্ক্রিপ্ট লিখুন এবং কোনটি বড় তা আপনার পরামর্শটি was)
অ্যালান শুটকো

গড়ে স্কেলে আমি বলব যে আমি স্লাইডগুলির প্রতিটি সেটে প্রায় 10% চিত্র ব্যবহার করি। সুতরাং পরে সমস্ত উত্তোলিত চিত্রের মাধ্যমে বাছাই করা খুব ব্যবহারিক নয়। পিডিএফ ইমেজ এক্সট্রাকশন ইউটিলিটিগুলি ব্যাকগ্রাউন্ড এবং ফ্রেমগুলিকে চিত্র হিসাবে নন-ইমেজ উপাদানগুলির ব্যাখ্যা করতেও প্রবণতা বোধ করে যা এই কাজটিকে আরও জটিল করে তোলে।
গ্লুটানিমেট

আমি pdfimages( -j প্যারামিটার সেট সহ ) কিছু পরীক্ষার রানও করেছি । 300 ডলারের মধ্যে 2 টি চিত্রই জেপিইগ হিসাবে স্বীকৃত ছিল। সমস্ত কিছু পিপিএম হিসাবে সংরক্ষণ করা হয়েছিল, যা বিএমপি ফর্ম্যাটের অনুরূপ (লসলেস, সঙ্কুচিত)। আমি প্রস্তাবিত স্ক্রিপ্টের আর একটি সুবিধা হ'ল এটি সমস্ত চিত্র উত্সের সাথে সামঞ্জস্যপূর্ণ হবে, এটি পিডিএফ পরিসংখ্যান বা ফাইল ডাউনলোড করা হোক। তবে যাইহোক আপনাকে ধন্যবাদ!
গ্লুটানীমেট

1

সম্পাদনা: মূল স্ক্রিপ্ট সহ কিছু সমস্যা স্থির করা হয়েছে। মার্কস থমাসের প্রস্তাবের ভিত্তিতে একটি বিকল্প যুক্ত করা হয়েছে।

সম্পাদনা করুন 2 : Updated কর্তক মূল্যবোধের সংখ্যার উপর ভিত্তি করে পরীক্ষা রান । গ্রেস্কেল চিত্রগুলির জন্য ফাইল আকারগুলি কীভাবে অনুমান করা যায় তা আমি এখনও নিশ্চিত নই। আপনি যদি আরজিবি রঙীন স্কিমের বাইরে প্রচুর সংখ্যক চিত্র নিয়ে কাজ করছেন তবে আপনি প্রথম স্ক্রিপ্টটি দ্বিতীয়টিতে ফ্যালব্যাক মোড হিসাবে প্রয়োগ করতে চাইতে পারেন।

সম্পাদনা 3 : optipngসংহত যুক্ত। এটি কোনও মানের ক্ষতি ছাড়াই পিএনজি ফাইল আকারকে অনুকূল করে। আরও তথ্যের জন্য এখানে দেখুন । কিছু ছোট উন্নতি।


সংস্করণ 0.1

গুরুত্বপূর্ণ দ্রষ্টব্য : এই স্ক্রিপ্টটি অবচয় করা হয়েছে। আরও নতুন সংস্করণগুলি আরও কার্যকর।

ঠিক আছে, আমার প্রশ্নটি সম্ভবত কিছুটা স্থানীয় হয়েছে, তাই আমি এটিতে কিছুটা সময় দিয়েছি এবং স্ক্রিপ্টটি নিজেই সংকলন করেছি:

#!/bin/bash

# AUTHOR:   (c) MHC (http://askubuntu.com/users/81372/mhc)
# NAME:     Intelliconvert 0.1
# DESCRIPTION:  A script to automate and optimize the choice between different image formats.
# LICENSE:  GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# REQUIREMENTS:  Imagemagick

ORIGINAL="$1"

###Filetype check###

MIME=$(file -ib "$ORIGINAL")

if [ "$MIME" = "image/png; charset=binary" ]
  then
    echo "PNG Mode"

###Variables###

      ##Original Image##
    FILENAME=$(basename "$ORIGINAL")
    PARENTDIR=$(dirname "$ORIGINAL")
        SUBFOLDER=$(echo "$PARENTDIR" | cut -d"/" -f10-)
    ORIGARCHIVE="~/ORIG"

      ##Converted Image##
    TEMPDIR="/tmp/imgcomp"
    CONVERTED="$TEMPDIR/$FILENAME.jpg"

      ##Image comparison##
    DIFFLO="50"
    DIFFHI="75"
    CUTOFF="1000000"

      ##DEBUG
    echo "#### SETTINGS ####"
    echo "Filepath to original = $ORIGINAL"
    echo "Filename= $FILENAME"
    echo "Parent directory = $PARENTDIR"
    echo "Archive directory = $ORIGARCHIVE"
    echo "Temporary directory = $TEMPDIR"
    echo "Filepath to converted image = $CONVERTED"
    echo "Low cut-off = $DIFFLO"
    echo "High cut-off = $DIFFHI"

###Conversion###

    convert -quality 92 -flatten -background white "$ORIGINAL" "$CONVERTED"

###Comparison###

    F1=$(stat -c%s "$ORIGINAL" )
    F2=$(stat -c%s "$CONVERTED" )
    FQ=$(echo "($F2*100/$F1)" | bc)

      #Depending on filesize we use a different Cut-off#
    if [ "$F1" -ge "$CUTOFF" ]
      then
        DIFF="$DIFFHI"
      else  
        DIFF="$DIFFLO"
    fi

      ##DEBUG
    echo "### COMPARISON ###"
    echo "Filesize original = $F1 Bytes"
    echo "Filesize converted = $F2 Bytes"
    echo "Chosen cut-off = $DIFF %"
    echo "Actual Ratio = $FQ %"


    if [ "$FQ" -le "$DIFF" ]
      then
           echo "JPEG is more efficient, converting..."
           mv -v "$CONVERTED" "$PARENTDIR"
               mkdir -p "$ORIGARCHIVE/$SUBFOLDER"
           mv -v "$ORIGINAL" "$ORIGARCHIVE/$SUBFOLDER"
      else
           echo "PNG is fine, exiting."
           rm -v "$CONVERTED"
    fi


  else
    echo "File does not exist or unknown MIME type, exiting."

fi

স্ক্রিপ্ট ওয়াচারের সাথে একত্রে দুর্দান্ত কাজ করে ।

এটি আমার প্রথম যথাযথ স্ক্রিপ্ট, সুতরাং এখানে কিছু সমাধান না করা সমস্যা এবং সমস্যাগুলি আমি সন্ধান করতে পারি না। এটি নিজের জন্য নির্দ্বিধায় ব্যবহার করুন এবং এটি উন্নত করুন। যদি আপনি এটি করেন তবে আমি এখানে কোনও মন্তব্য দিতে পারলে আমি এটির প্রশংসা করব, যাতে আমি এটি থেকে শিখতে পারি।


সংস্করণ 0.2.1

আসল ফাইলের আকারটিকে একটি আনপ্রেসড ইমেজ হিসাবে আনুমানিক আকারের সাথে তুলনা করে সঠিক বিন্যাসটি খুঁজে পাওয়ার আরও কার্যকর উপায় অর্জন করা যেতে পারে :

#!/bin/bash

# AUTHOR:   (c) MHC (http://askubuntu.com/users/81372/mhc)
# NAME:     Intelliconvert 0.2.1
# DESCRIPTION:  A script to automate and optimize the choice between different image formats.
# LICENSE:  GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# REQUIREMENTS:  Imagemagick, Optipng

################ Filetype Check#################

MIME=$(file -ib "$1")

if [ "$MIME" = "image/png; charset=binary" ]
  then
    echo "###PNG Mode###"

####################Settings####################

##Folders##
ORIGARCHIVE="~/ORIG"

##Comparison##
DIFFLO="25"
DIFFHI="20"
CUTOFF="1000000"

################################################

###Variables###

ORIGINAL="$1"
FILENAME=$(basename "$ORIGINAL")
PARENTDIR=$(dirname "$ORIGINAL")
SUBFOLDER=$(echo "$PARENTDIR" | cut -d"/" -f10-)
CONVERTED="$PARENTDIR/$FILENAME.jpg"

#DEBUG#
    echo "###SETTINGS###"
    echo "Filepath to original = $ORIGINAL"
    echo "Filename= $FILENAME"
    echo "Parent directory = $PARENTDIR"
    echo "Archive directory = $ORIGARCHIVE"
    echo "Filepath to converted image = $CONVERTED"
    echo "Low cut-off = $DIFFLO"
    echo "High cut-off = $DIFFHI"


###Image data###

        WIDTH=$(identify -format "%w" "$ORIGINAL")
        HEIGHT=$(identify -format "%h" "$ORIGINAL")
        ZBIT=$(identify -format "%z" "$ORIGINAL")
        COL=$(identify -format "%[colorspace]" "$ORIGINAL")
        F1=$(stat -c%s "$ORIGINAL")

        if [ "$COL" = "RGB" ]
          then
              CHANN="3"
          else
              CHANN="1"
        fi


###Cutoff setting###

    if [ "$F1" -ge "$CUTOFF" ]
      then
        DIFF="$DIFFHI"
      else  
        DIFF="$DIFFLO"
    fi


###Calculations on uncompressed image###

        BMPSIZE=$(echo "($WIDTH*$HEIGHT*$ZBIT*$CHANN/8)" | bc)
        FR=$(echo "($F1*100/$BMPSIZE)" | bc)

#DEBUG#

        echo "###IMAGE DATA###"
        echo "Image Dimensions = $WIDTH x $HEIGHT"
        echo "Colour Depth = $ZBIT"
        echo "Colour Profile = $COL"
        echo "Channels = $CHANN"
        echo "Estimated uncompressed size = $BMPSIZE"
        echo "Actual file size = $F1"
        echo "Estimated size ratio = $FR %"
        echo "Cutoff at $DIFF %"

###Backup###

        echo "###BACKUP###"
        mkdir -p "$ORIGARCHIVE/$SUBFOLDER"  #keep the original folder structure
        cp -v "$ORIGINAL" "$ORIGARCHIVE/$SUBFOLDER"
        echo ""

###Comparison###

    if [ "$FR" -ge "$DIFF" ]
      then
          echo "JPEG is more efficient, converting..."
          convert -quality 92 -flatten -background white "$ORIGINAL" "$CONVERTED"
              echo "Done."
          echo "Cleaning up..."
          rm -v "$ORIGINAL"
      else
          echo "PNG is fine, passing over to optipng."
              echo "Optimizing..."
              optipng "$ORIGINAL"
              echo "Done."
    fi

################ Filetype Check#################

  else
    echo "File does not exist or unknown MIME type, exiting."

fi

দুর্দান্ত ধারণাটির জন্য @ মার্কস থমাসের কাছে প্রপস।


1
এখানে এমন একটি চিন্তাভাবনা যা স্ক্রিপ্টটি উল্লেখযোগ্যভাবে আরও দক্ষ করে তুলতে পারে। মাত্রা এবং রঙের গভীরতার ভিত্তিতে পিএনজির ফাইলসাইজটিকে তার আনুমানিক সঙ্কুচিত আকারের সাথে তুলনা করুন। ফটোগ্রাফিক চিত্রগুলি প্রায় 50% এর একটি সংকোচন অনুপাত স্কোর করতে পারে তবে জটিল স্কিম্যাটিকাসগুলি খুব সহজেই 10% এর নিচে নেমে যেতে পারে। অনুপাতটি যদি কম সীমাতে থাকে তবে আপনি পিএনজিকে আরও ভাল পছন্দ বলে ধরে নিতে পারেন এবং পুরোপুরি জেপিজিতে রূপান্তর করতে পারেন।
টমাস

@ মার্কস থমাস: দুর্দান্ত ধারণা, আপনাকে ধন্যবাদ! আমি আপনার প্রস্তাবের ভিত্তিতে একটি বিকল্প স্ক্রিপ্ট যুক্ত করেছি। অনুপাতগুলিতে এখনও কিছুটা টুইট করা দরকার, তবে তা অন্যথায় কার্যকর হয়। গ্রেস্কেল চিত্রগুলির সাথে একটি মাত্র সমস্যা আছে। বিএমপি আকারগুলি তাদের জন্য সঠিকভাবে গণনা করা হয় না এবং আমি কেন তা বুঝতে পারি না। এটি একটি ছোটখাটো সমস্যা, সত্যই, আমি যে প্রায় সমস্ত চিত্র নিয়ে কাজ করি তা রঙিন হলেও এটি এখনও বিরক্তিকর।
গ্লুটোনিমেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.