একটি চিত্রের পিক্সেল আকার পেতে শেল কমান্ড


43

এমন কোনও শেল কমান্ড রয়েছে যা কোনও চিত্রের পিক্সেল আকারটি দেয়?

আমি বিভিন্ন মাপের সাথে বিভিন্ন জিআইএফ থেকে শুরু করে একটি অ্যানিমেটেড জিএফ উত্পাদন করার চেষ্টা করছি convert(উদাঃ convert -delay 50 1.gif 2.gif -loop 0 animated.gif)।

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



"পিক্সেল আকার" কি? বিট প্রতি পিক্সেল (গভীরতা) বা পিক্সেল গণনা?
সিরো সান্তিলি 新疆 改造 中心 法轮功 六四

উত্তর:


50

একটি সমাধান খুঁজে পেয়েছে identify:, চিত্রগ্রাহক প্যাকেজের অংশ, আমার যা প্রয়োজন তা ঠিক করে দেয়

$ identify color.jpg 
> color.jpg JPEG 1980x650 1980x650+0+0 8-bit DirectClass 231KB 0.000u 0:00.000

আপনি যখন ব্যাখ্যা করতে পারেন যে আমি দৌড়ানোর সময় কেন একাধিক সারি পেয়েছি identify imagename.ico? Like todour.ico[0] ICO 32x32 32x32+0+0 4-bit sRGB 0.000u 0:00.000 todour.ico[1] ICO 16x16 16x16+0+0 4-bit sRGB 0.000u 0:00.000 todour.ico[2] ICO 48x48 48x48+0+0 8-bit sRGB 0.000u 0:00.000
রোচসনই

44

identifyচোখের দ্বারা আউটপুট বিশ্লেষণ বা পাঠ্য ইউটিলিটিগুলির পরিবর্তে, আপনি যে -formatবিকল্পটি সর্বাধিক উপযুক্ত তার প্রস্থ এবং উচ্চতা আউটপুট দেওয়ার জন্য তার বিকল্পটি ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

$ identify -format '%w %h' img.png
100 200
$ identify -format '%wx%h' img.png
100x200

ইমেজ বৈশিষ্ট্য একটি তালিকা আপনার উপর আউটপুট পাওয়া গেছে যে পারেন যাবে এই পৃষ্ঠার , কিন্তু প্রশ্ন এখানে, এটা সব তুমি প্রয়োজন বলে মনে হয় %wএবং %hযা পিক্সেলে, ইমেজ এর প্রস্থ ও উচ্চতা দিতে যথাক্রমে।


বেশিরভাগ চিত্রের আউটপুট আউটপুট বাছাই করে -formatপিক্সেলগুলির ক্ষেত্রে সর্বাধিক চিত্রগুলি সন্ধান করার ক্ষেত্রে আমার কাছে সরবরাহযোগ্য নমনীয়তাটি কাজে এসেছিল %[fx:w*h]

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


15

আপনার প্রয়োজনীয় তথ্য পেতে আপনি "ফাইল" কমান্ডটি ব্যবহার করতে পারেন:

~# file cha_2.png 
cha_2.png: PNG image data, 656 x 464, 8-bit/color RGB, non-interlaced

1
এটি অন্যান্য (নন-পিএনজি) চিত্রের ধরণের জন্য প্রতিবেদন করে না ... file taylor-swift-money-makers-990.jpg->taylor-swift-money-makers-990.jpg: JPEG image data, JFIF standard 1.01, comment: "CREATOR: gd-jpeg v1.0 (using IJ"
অ্যালেক্স ধূসর

সত্য নয়, এটি কমপক্ষে সাম্প্রতিক ম্যাকোস সংস্করণগুলির আওতায় পড়ে।
rien333

5

identifyআকারগুলি দেখতে ব্যবহার করুন :

$ identify color.jpg 
> color.jpg JPEG 1980x650 1980x650+0+0 8-bit DirectClass 231KB 0.000u 0:00.000

cut | sedক্ষেত্র 3 থেকে এর মাধ্যমে মান উত্তোলন করুন :

identify ./color.jpg | cut -f 3 -d " " | sed s/x.*// #width
identify ./color.jpg | cut -f 3 -d " " | sed s/.*x// #height

চলকটিতে সাইন ইন করুন:

W=`identify ./color.jpg | cut -f 3 -d " " | sed s/x.*//` #width
H=`identify ./color.jpg | cut -f 3 -d " " | sed s/.*x//` #height
echo $W
> 1980
echo $H
> 650

2

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

     $ du -h *.png --total | tail -n 1
     9.2M    total

     $ ls -l *.png | wc -l
     107

     $ /usr/bin/time file *.png
-->  0.37user 0.26system 0:06.93elapsed 9%CPU (0avgtext+0avgdata 37232maxresident)k
     22624inputs+0outputs (9major+2883minor)pagefaults 0swaps

     $ /usr/bin/time identify *.png
-->  0.56user 0.22system 0:06.77elapsed 11%CPU (0avgtext+0avgdata 25648maxresident)k
     34256inputs+0outputs (119major+2115minor)pagefaults 0swaps

কেবলমাত্র প্রয়োজনীয় বাইটগুলি পড়ে, এই অপারেশনটি উল্লেখযোগ্যভাবে বাড়ানো যেতে পারে।

     $ /usr/bin/time ./pngsize *.png
-->  0.00user 0.00system 0:00.03elapsed 12%CPU (0avgtext+0avgdata 1904maxresident)k
     0inputs+0outputs (0major+160minor)pagefaults 0swaps

এখানে pngsize:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <err.h>
#define oops(syscall) { printf("error processing %s: ", argv[i]); \
        fflush(0); perror(syscall"()"); continue; }
int main(int argc, char **argv) {
    int fd, i;
    uint32_t h, w;
    if (argc < 2) { printf("%s <pngfile> [pngfile ...]\n", argv[0]); exit(0); }
    for (i = 1; i < argc; i++) {
        if (argc > 2) printf("%s: ", argv[i]);
        if ((fd = open(argv[i], O_RDONLY)) == -1) oops("open");
        if (lseek(fd, 16, SEEK_SET) == -1) oops("lseek");
        if (read(fd, &w, 4) < 1) oops("read");
        if (read(fd, &h, 4) < 1) oops("read");
        printf("%dx%d\n", htonl(w), htonl(h));
        if (close(fd) == -1) oops("close");
    }
    return 0;
}

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

কোড ব্যবহারের জন্য inet.h htonl () অব- করার endian -ize হেডার বাইট ক্রম।


0

আপনি গ্রাফিক্স ম্যাগিকও চেষ্টা করে দেখতে পারেন , এটি ইমেজম্যাগিকের একটি ভাল রক্ষণাবেক্ষণযোগ্য কাঁটাচামচ যেমন: ফ্লিকার এবং এটসিতে ব্যবহৃত:

$ gm identify a.jpg
a.jpg JPEG 480x309+0+0 DirectClass 8-bit 25.2K 0.000u 0:01

ইমেজম্যাগিকের সনাক্তকরণের চেয়ে এটি দ্রুত (আমার পরীক্ষাগুলিতে প্রায় দুইবার) is


0

এটি একটি সহায়ক স্নিপেট ছিল (আমি লিখিনি) যা ফোল্ডারে প্রতিটি পিএনজি এবং জেপিজির জন্য মাত্রা দেয়:

file ./* | perl -ne '@m = /^.*.jpg|^.*.png|[0-9][0-9]*[ ]?x[ ]?[0-9][0-9]*/g; print "@m\n"'

0

আমার মতো যারা মেগাপিক্সেল আকার চান:

perl -le "printf \"=> fileName = %s size = %.2f Mpix\n\", \"$fileName\", $(identify -format '%w*%h/10**6' $fileName)"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.