জেপিইজি সংশোধন না করে কীভাবে এক্সআইএফ ডেটা সরানো যায়?


127

আমি জেপিজি ফাইলগুলি থেকে এক্সআইএফ তথ্য (থাম্বনেইল, মেটাডেটা, ক্যামেরার তথ্য ... সবকিছু সহ!) সরাতে চাই, তবে আমি এটিকে পুনরায় সংক্ষেপিত করতে চাই না, কারণ জেপিইজি পুনরায় সংক্ষেপণ করা মানকে হ্রাস করবে, পাশাপাশি সাধারণভাবে বাড়িয়ে তুলবে ফাইলের আকার.

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

একটি অনুরূপ প্রশ্ন আছে, কিন্তু । নেট সম্পর্কিত


উত্তর:


166

এক্সিফ্টোল আমার জন্য কাজ করে, এটি পার্লে লেখা থাকে সুতরাং আপনার জন্য কোনও কাজ করা উচিত

https://exiftool.org/

ব্যবহার:

exiftool -all= image.jpg

6
আরও কিছু আকর্ষণীয় বিকল্প: "-o outfile.jpg" বা "-out outfile.jpg", "-overwrit_original" বা "-overwrit_original_in_places", "-পি" বা "-পরিবর্তন", "-আর" বা "-রিকারী"
ডেনিলসন সা মাইয়া

6
আমি ঠিক একই জিনিসটি অনুসন্ধান করতে এই থ্রেড জুড়ে এসেছি। আমি কেবল ভেবেছিলাম আমি উবুন্টু ব্যবহারকারীদের জন্য এখানে একটি মন্তব্য যুক্ত করব: স্ক্রিপ্টটি উবুন্টু রেপোতে লিবিমেজ-এক্সিফ্টোল-পার্ল হিসাবে উপলব্ধ: sudo apt-get install libimage-exiftool-perl
ব্যবহারকারী 605331

7
বা brew install exiftool
হোমব্রিউ

6
আপনি যদি সত্যই প্রোগ্রামটিতে বিশ্বাস করেন তবে অ্যাড -overwrite_originalসুইচ এবং প্রোগ্রামটি ব্যাকআপ ফাইলগুলি তৈরি করবে না।
সালমান এ

10
বিকল্পের সাথে স্বীকৃত ব্যবহার-সমস্ত = আপনার চিত্র থেকে সমস্ত ট্যাগ সরিয়ে দেয়। Jpg! সঠিক উত্তরটি হবেexiftool -EXIF= image.jpg
পিটারকো

85

চিত্রযুক্তি সহ:

convert <input file> -strip <output file>

21
দুঃখিত, তবে-স্ট্রিপটি প্রত্যাশার মতো কাজ করে না, যেহেতু ইমেজম্যাগিক এখনও জেপিইজি ফাইলটি পুনরায় সংক্ষেপে।
ডেনিলসন সা মিয়া

5
দ্রষ্টব্য, উপায় দ্বারা, কেউ যদি ফাইলটির সাথে অন্য রূপান্তরগুলি করে তবে "স্ট্রিপ" দরকারী হতে পারে। এছাড়াও মনে রাখবেন যে "-thumbnail 123x456" "-strip -resize 123x456" এর সমতুল্য।
ডেনিলসন সা মাইয়া

15
+1 কারণ এটি একটি নতুন সরঞ্জাম ডাউনলোড করার চেয়ে মাইল মাইল ছিল।
ডেভ ডপসন

13
নোটটি -stripরঙের প্রোফাইলগুলি সরিয়ে দেয়। যে কেউ প্রোফাইল তথ্য না হারিয়ে EXIF ​​ডেটা ফেলার চেষ্টা করছেন, আমার সমাধানটি এখানে দেখুন: stackoverflow.com/a/17516878/1854499
রবার্ট

2
ওপির এই উত্তরটি আপডেট করা উচিত, কারণ এটি দ্বিগুণ ভুল।
বার্বেট

49

করে ImageMagick হয়েছে -strip পরামিতি, কিন্তু এটা সংরক্ষণের আগে ইমেজ recompresses। এইভাবে, এই পরামিতিটি আমার প্রয়োজনের জন্য অকেজো।

ইমেজম্যাগিক ফোরামের এই বিষয়টি ব্যাখ্যা করেছে যে ইমেজম্যাগিকের জেপিইজি লসলেস অপারেশনগুলির জন্য কোনও সমর্থন নেই (যখনই এই পরিবর্তন হয়, দয়া করে কোনও লিঙ্কের সাথে একটি মন্তব্য পোস্ট করুন!) এবং জেপিগট্রান ( লাইবজেপিগ থেকে) ব্যবহার করার পরামর্শ দেয় :

jpegtran -copy none -progressive image.jpg > newimage.jpg
jpegtran -copy none -progressive -outfile newimage.jpg image.jpg

(আপনি যদি আমার নিজের প্রশ্নের উত্তর সম্পর্কে আমার সম্পর্কে অনিশ্চিত থাকেন তবে এটি এবং এই এবং এটি পড়ুন )


1
জেপিগ্রাটান পদ্ধতি ব্যবহার করে দেখেছি তবে বেশিরভাগ ক্ষেত্রে এটি ফাইলসকে হ্রাস করার পরিবর্তে বাড়িয়ে তোলে। বেশিরভাগ ক্ষেত্রে ফাইলাইজিকে হ্রাস করতে আপনি এটি করতে চান।
কোডবিট

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

1
একটি ছোট্ট বিষয়: আমার জন্য, তালিকাভুক্ত 2 টি কমান্ডের কোনওটিই কাজ করে না, পরিবর্তে নিম্নলিখিত কাজগুলি করেছেন: jpegtran -copy none image.jpg newimage.jpg
কোনওটিই

@ কোডবিট আপনার প্যারাম যুক্ত করা দরকার -progressiveএটি আকার হ্রাস করবে।
টম

31

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

ব্যবহার:

exiv2 rm image.jpg

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

ধন্যবাদ! আমি নিশ্চিত করতে চেয়েছিলাম যে এক্সিভি 2 জিপিএস অবস্থানের তথ্য প্রদর্শন করবে যাতে আমি দেখতে পারি যে এটি পরে গেছে। মুদ্রণের জন্য ডিফল্ট বিকল্পটি হল "সারাংশ" যা জিপিএস তথ্য বাদ দেয়। সমস্ত তথ্য দেখতে আপনাকে ব্যবহার করতে হবে: exiv2 -pa PR image.jpg
রব রাসেল

দয়া করে মনে রাখবেন যে এই সরঞ্জামটি আমার কিছু জেপিগের গুণমানকে ধ্বংস করেছে, ভাগ্যক্রমে আমার একটি ব্যাকআপ ছিল
ইস্পাত মস্তিষ্ক

@ স্টিলব্রেন, এটি সত্যিই অদ্ভুত - আপনি কি এর দ্বারা প্রভাবিত জেপিইজি চিত্রগুলির একটি ভাগ করতে পারেন?
বোগদান স্টেনসেকু

এটিই সবচেয়ে নিরাপদ সমাধান
মোহাম্মদ শরীফ সি

20

আমি প্রস্তাব দেব jhead :

man jhead
jhead -purejpg image.jpg

ডেবিয়ান / উবুন্টুতে কেবল 123Kb, পুনরায় সংকোচন করে না। এটি চিত্রটিকে রূপান্তরিত করে যদিও নোট করুন, তাই আপনার প্রয়োজন হলে আসলটি অনুলিপি করুন।


2

আমি সম্প্রতি সি তে এই প্রকল্পটি হাতে নিয়েছি নীচের কোডটি নিম্নলিখিতটি করে:

1) চিত্রের বর্তমান ওরিয়েন্টেশন পান।

2) ফাঁকা রেখে APP1(এক্সিফ ডেটা) এবং APP2(ফ্ল্যাশপিক্স ডেটা) থাকা সমস্ত ডেটা সরিয়ে দেয়।

3) APP1ওরিয়েন্টেশন চিহ্নিতকরণটি পুনরুদ্ধার করে এবং এটি মূল মানকে সেট করে।

4) প্রথম EOIচিহ্নিতকারী (চিত্রের শেষ ) সন্ধান করে এবং নেসেসারি হলে ফাইলটি কেটে দেয়।

প্রথমে কিছু বিষয় লক্ষণীয়:

1) এই প্রোগ্রামটি আমার নিকন ক্যামেরার জন্য ব্যবহৃত হয়। নিকনের জেপিজি ফর্ম্যাটটি এটি তৈরি করা প্রতিটি ফাইলের একেবারে শেষের দিকে কিছুটা যুক্ত করে। তারা দ্বিতীয় EOIমার্কার তৈরি করে চিত্রের শেষের দিকে এই ডেটাটি এনকোড করে । সাধারণত চিত্রের প্রোগ্রামগুলি প্রথম EOIচিহ্নিত পাওয়া যায় read নিকনের কাছে এর পরে তথ্য রয়েছে যা আমার প্রোগ্রামটি কেটে দেয়।

2) এটি নিকন ফর্ম্যাটের জন্য, এটি big endianবাইট ক্রম ধরে । যদি আপনার চিত্র ফাইলটি ব্যবহার করে তবে little endianকিছু সমন্বয় করা দরকার।

3) ImageMagickএক্সিফ ডেটা ফালা ব্যবহার করার চেষ্টা করার সময় , আমি লক্ষ্য করেছি যে আমি যেটি শুরু করেছি তার চেয়ে বড় ফাইল দিয়ে শেষ করেছি। এটি আমাকে বিশ্বাস করতে পরিচালিত করে যে Imagemagickআপনি যে তথ্যটি সরিয়ে নিতে চান সেটি এনকোডিং করছে এবং এটি ফাইলের অন্য কোথাও সংরক্ষণ করছে। আমাকে পুরাতন ফ্যাশন বলুন, কিন্তু আমি যখন কোনও ফাইল থেকে কিছু সরিয়ে ফেলি, আমি একই আকারের না হলে একটি ফাইলের আকার ছোট হতে চাই। অন্য কোনও ফলাফল ডেটা মাইনিংয়ের পরামর্শ দেয়।

এবং এখানে কোড:

#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <string.h>
#include <errno.h>

// Declare constants.
#define COMMAND_SIZE     500
#define RETURN_SUCCESS     1
#define RETURN_FAILURE     0
#define WORD_SIZE         15

int check_file_jpg (void);
int check_file_path (char *file);
int get_marker (void);
char * ltoa (long num);
void process_image (char *file);

// Declare global variables.
FILE *fp;
int orientation;
char *program_name;

int main (int argc, char *argv[])
{
// Set program name for error reporting.
    program_name = basename(argv[0]);

// Check for at least one argument.
    if(argc < 2)
    {
        fprintf(stderr, "usage: %s IMAGE_FILE...\n", program_name);
        exit(EXIT_FAILURE);
    }

// Process all arguments.
    for(int x = 1; x < argc; x++)
        process_image(argv[x]);

    exit(EXIT_SUCCESS);
}

void process_image (char *file)
{
    char command[COMMAND_SIZE + 1];

// Check that file exists.
    if(check_file_path(file) == RETURN_FAILURE)
        return;

// Check that file is an actual JPEG file.
    if(check_file_jpg() == RETURN_FAILURE)
    {
        fclose(fp);
        return;
    }

// Jump to orientation marker and store value.
    fseek(fp, 55, SEEK_SET);
    orientation = fgetc(fp);

// Recreate the APP1 marker with just the orientation tag listed.
    fseek(fp, 21, SEEK_SET);
    fputc(1, fp);

    fputc(1, fp);
    fputc(18, fp);
    fputc(0, fp);
    fputc(3, fp);
    fputc(0, fp);
    fputc(0, fp);
    fputc(0, fp);
    fputc(1, fp);
    fputc(0, fp);
    fputc(orientation, fp);

// Blank the rest of the APP1 marker with '\0'.
    for(int x = 0; x < 65506; x++)
        fputc(0, fp);

// Blank the second APP1 marker with '\0'.
    fseek(fp, 4, SEEK_CUR);

    for(int x = 0; x < 2044; x++)
        fputc(0, fp);

// Blank the APP2 marker with '\0'.
    fseek(fp, 4, SEEK_CUR);

    for(int x = 0; x < 4092; x++)
        fputc(0, fp);

// Jump the the SOS marker.
    fseek(fp, 72255, SEEK_SET);

    while(1)
    {
// Truncate the file once the first EOI marker is found.
        if(fgetc(fp) == 255 && fgetc(fp) == 217)
        {
            strcpy(command, "truncate -s ");
            strcat(command, ltoa(ftell(fp)));
            strcat(command, " ");
            strcat(command, file);
            fclose(fp);
            system(command);
            break;
        }
    }
}

int get_marker (void)
{
    int c;

// Check to make sure marker starts with 0xFF.
    if((c = fgetc(fp)) != 0xFF)
    {
        fprintf(stderr, "%s: get_marker: invalid marker start (should be FF, is %2X)\n", program_name, c);
        return(RETURN_FAILURE);
    }

// Return the next character.
    return(fgetc(fp));
}

int check_file_jpg (void)
{
// Check if marker is 0xD8.
    if(get_marker() != 0xD8)
    {
        fprintf(stderr, "%s: check_file_jpg: not a valid jpeg image\n", program_name);
        return(RETURN_FAILURE);
    }

    return(RETURN_SUCCESS);
}

int check_file_path (char *file)
{
// Open file.
    if((fp = fopen(file, "rb+")) == NULL)
    {
        fprintf(stderr, "%s: check_file_path: fopen failed (%s) (%s)\n", program_name, strerror(errno), file);
        return(RETURN_FAILURE);
    }

    return(RETURN_SUCCESS);
}

char * ltoa (long num)
{
// Declare variables.
        int ret;
        int x = 1;
        int y = 0;
        static char temp[WORD_SIZE + 1];
        static char word[WORD_SIZE + 1];

// Stop buffer overflow.
        temp[0] = '\0';

// Keep processing until value is zero.
        while(num > 0)
        {
                ret = num % 10;
                temp[x++] = 48 + ret;
                num /= 10;
        }

// Reverse the word.
        while(y < x)
        {
                word[y] = temp[x - y - 1];
                y++;
        }

        return word;
}

আশা করি এটি কাউকে সাহায্য করবে!


1

সুবিধার জন্য ইঙ্গিত: আপনি যদি উইন্ডোতে থাকেন তবে আপনি প্রসঙ্গ মেনুতে একটি এন্ট্রি ইনস্টল করতে রেজিস্ট্রিতে একটি আরইজি ফাইল প্রয়োগ করতে পারেন, যাতে আপনি ফাইলটি ডান ক্লিক করে এবং কমান্ডটি নির্বাচন করে সহজেই মেটাডেটা সরাতে পারেন।

উদাহরণস্বরূপ (আপনার কম্পিউটারে এক্সিকিউটেবলগুলি কোথায় ইনস্টল করা হয়েছে তার দিকে নির্দেশিত পথগুলি সম্পাদনা করতে মনে রাখবেন):


জেপিজি, জেপিজি, জেপিই, জেএফআইএফ ফাইলগুলির জন্য: কমান্ড " মেটাডেটা সরান "
( এক্সিফটুল ব্যবহার করে মূল ফাইলটিকে ব্যাকআপ হিসাবে সংরক্ষণ করে)
exiftool -all= image.jpg

JPG,-RemoveExif.reg

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\jpegfile\shell\RemoveMetadata]
@="Remove metadata"
[HKEY_CURRENT_USER\Software\Classes\jpegfile\shell\RemoveMetadata\command]
@="\"C:\\Path to\\exiftool.exe\" -all= \"%1\""
[HKEY_CURRENT_USER\Software\Classes\jpegfile\shell\RemoveMetadata]
"Icon"="C:\\Path to\\exiftool.exe,0"

PNG ফাইল জন্য: কমান্ড " minified পিএনজি রূপান্তর "
(ব্যবহার করে ImageMagick , মূল ফাইল কে overwrite ডেটা পরিবর্তন)
convert -background none -strip -set filename:n "%t" image.png "%[filename:n].png"

পিএনজি-Minify.reg

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\pngfile\shell\ConvertToMinifiedPNG]
@="Convert to minified PNG"
[HKEY_CURRENT_USER\Software\Classes\pngfile\shell\ConvertToMinifiedPNG\command]
@="\"C:\\Path to\\convert.exe\" -background none -strip -set filename:n \"%%t\" \"%1\" \"%%[filename:n].png\""
[HKEY_CURRENT_USER\Software\Classes\pngfile\shell\ConvertToMinifiedPNG]
"Icon"="C:\\Path to\\convert.exe,0"

সম্পর্কিত: প্রসঙ্গ মেনুতে পিএনজিগুলিকে আইসিওতে রূপান্তর করুন


1

আমরা এটি টিআইএফএফ ফাইল থেকে অক্ষাংশের ডেটা অপসারণ করতে ব্যবহার করেছি:

exiv2 mo -M"del Exif.GPSInfo.GPSLatitude" IMG.TIF যেখানে আপনি exiv2 -pa IMG.TIFসমস্ত মেটাডেটা তালিকাবদ্ধ করতে ব্যবহার করতে পারেন ।


1

লসলেস এক্সআইএফ স্ট্রিপের জন্য আপনি লিগসিফ ব্যবহার করতে পারেন যা সাইগউইনের সাথে উপলব্ধ । কোনও চিত্র বেনামে রাখতে এক্সআইএফ এবং থাম্বনেইল উভয়কে সরান:

$ exif --remove --tag=0 --remove-thumbnail exif.jpg -o anonymized.jpg

.batসাইগউইনের সাথে ব্যবহারের জন্য ড্রাগ-এন-ড্রপ ফাইল:

@ECHO OFF
exif --remove --tag=0 --remove-thumbnail %~1

0

অন্যান্য সফ্টওয়্যার:

মেটাএবিলিটি কুইকফিক্স

"মেটিবিলিটিউইকফিক্স আপনার সমস্ত ব্যক্তিগত তথ্য এবং জিপিএস অবস্থানের ডেটা আপনার সমস্ত ফটোগুলি থেকে কেবল একটি মাউস ক্লিকের সাথে সরিয়ে দেয় It "

জেপিইজি এবং পিএনজি স্ট্রিপার

"জেপিজি / জেপিজি / জেএফআইএফ এবং পিএনজি ফাইলগুলি থেকে অনারসারি মেটাডেটা (জাঙ্ক) কেটে ফেলা / সাফ করার / অপসারণের একটি সরঞ্জাম। চিত্রের মানটি প্রভাবিত হয় না command কমান্ড লাইন সমর্থন অন্তর্ভুক্ত command


0

আপনি যদি ইতিমধ্যে জেপেগোপটিম ব্যবহার করেন তবে আপনি এটি এক্সিফটি সরাতেও ব্যবহার করতে পারেন।

jpegoptim -s *
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.