শুধুমাত্র যখন প্রয়োজন হয় তখন কিভাবে থাম্বনেইল তৈরি করা যায়?


18

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

যখন প্রয়োজন হয় তখনই অ্যাড_ইমেজ_সাইজ চালানোর কোনও উপায় আছে?

ধন্যবাদ

আপডেট আপনি যেমন উল্লেখ করেছেন সত্যই এটি যুক্ত করা উচিত নয় যা এড়াতে হবে। আমি_পোস্ট_থাম্বনেল ('স্লাইডার-থাম্ব') ব্যবহার করার সময় চিত্রের আকার পরিবর্তন করতে খুব ভাল লাগবে; হতে পারে এই মন্থরতাটি চিত্রটির প্রথম দৃষ্টিভঙ্গি তবে সেই দৃশ্যটি সাধারণত আমার দ্বারা উত্পন্ন হয় যখন আমি প্রকৃতপক্ষে পোস্টটি পর্যালোচনা করি তাই আমি যত্ন করি না।

সুতরাং আমার পোস্ট, স্লাইডার, ব্লগ থাম্বনালস, পোর্টফোলিও থাম্বনেলস ইত্যাদির মধ্যে আমি 1000 টি চিত্র পেয়েছি এবং আমি স্লাইডারটির জন্য কেবল 10 টি চিত্রকে পুনরায় আকার দিতে চাই other অন্যান্য 990 চিত্রের জন্য থাম্বনেইল আকার উত্পন্ন করতে অনেকগুলি অপচয় করা সংস্থান দেখতে পাচ্ছি।

আশা করি এটি এখন পরিষ্কার হয়ে গেছে, আমার ইংরাজির জন্য দুঃখিত


2
প্রথম স্থানটিতে 990 অব্যবহৃত চিত্রের চেয়ে অতিরিক্ত 990 চিত্র থেকে স্থান এবং সংস্থানগুলির অপচয় থেকে থাম্বনেইলগুলি কীভাবে উত্পন্ন হয়? আপনি সক্রিয়ভাবে ব্যবহার করছেন এমন চিত্রগুলি কী আপলোড করতে হবে তা আরও কী বোঝায় না?
সিকহিপি

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

1
আপনি আমাকে ভুল বুঝেছেন. আমি পোস্টগুলিতে 990 টি চিত্র ব্যবহার করি, আমি কেবল হোম স্লাইডারে এটি ব্যবহার করি না। তাদের মধ্যে
কিছুগুলির

উত্তর:


12

আতর এর কটাক্ষপাত ডায়নামিক ভাবমূর্তি Resizer প্লাগইন

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


2
নোট করুন যে প্লাগইনটিতে পুরানো পোস্টগুলিতে চিত্র যুক্ত করার ক্ষেত্রে একটি সমস্যা রয়েছে। প্যাচগুলি স্বাগত।
অটো

ঠিক আমি যা খুজছিলাম তা ঠিক। আমি একবার চেষ্টা করবো। সুতরাং এটি শুধুমাত্র নতুন পোস্টে কাজ করে?
chifliiiii

1
এই পোস্টটি জুড়ে এখন যারা আসছেন তাদের কাছে, এখানে একটি অনুরূপ প্লাগইন রয়েছে যা সক্রিয়ভাবে বিকাশমান বলে মনে হচ্ছে: wordpress.org/plugins/fly-dynamic-image-resizer
টিম ম্যালোন

7

আপনার থিম ফাংশন ফাইল এ এটি রাখুন। এটি ওয়ার্ডপ্রেস আপলোড করার সময় 3 টি ডিফল্ট আকার ছাড়া আর কিছু তৈরি করা বন্ধ করে দেবে।

তখন কোনও চিত্রকে নির্দিষ্ট আকারে অনুরোধ করা হয়, যা এখনও তৈরি হয়নি, এটি কেবল একবারেই তৈরি করা হবে।

        add_filter('image_downsize', 'ml_media_downsize', 10, 3);
        function ml_media_downsize($out, $id, $size) {
            // If image size exists let WP serve it like normally
            $imagedata = wp_get_attachment_metadata($id);
            if (is_array($imagedata) && isset($imagedata['sizes'][$size]))
                return false;

            // Check that the requested size exists, or abort
            global $_wp_additional_image_sizes;
            if (!isset($_wp_additional_image_sizes[$size]))
                return false;

            // Make the new thumb
            if (!$resized = image_make_intermediate_size(
                get_attached_file($id),
                $_wp_additional_image_sizes[$size]['width'],
                $_wp_additional_image_sizes[$size]['height'],
                $_wp_additional_image_sizes[$size]['crop']
            ))
                return false;

            // Save image meta, or WP can't see that the thumb exists now
            $imagedata['sizes'][$size] = $resized;
            wp_update_attachment_metadata($id, $imagedata);

            // Return the array for displaying the resized image
            $att_url = wp_get_attachment_url($id);
            return array(dirname($att_url) . '/' . $resized['file'], $resized['width'], $resized['height'], true);
        }


        add_filter('intermediate_image_sizes_advanced', 'ml_media_prevent_resize_on_upload');
        function ml_media_prevent_resize_on_upload($sizes) {
            // Removing these defaults might cause problems, so we don't
            return array(
                'thumbnail' => $sizes['thumbnail'],
                'medium' => $sizes['medium'],
                'large' => $sizes['large']
            );
        }

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

2
খুব ভাল তবে এখন এটি আমার সমস্ত কাস্টম আকারের প্রয়োজন হলে সমস্ত চিত্র তৈরি করে ..
গিজস

আমি যখন উন্নত কাস্টম ক্ষেত্রগুলি থেকে চিত্র অবজেক্টগুলি ব্যবহার করি তখনই এটি ঘটে
গিজ 20

যদি add_image_size পূর্বে এইমাত্র পরিবর্তন চিত্রের আকারসমূহ সংজ্ঞায়িত করা হয় কাজ করছে না
বেঞ্জামিন Intal

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

2

দুর্ভাগ্যক্রমে @ প্যাট্রিকের উত্তর ডাব্লুপি ৪.৪-তে প্রবর্তিত srcset ফাংশনগুলি ভঙ্গ করে। ভাগ্যক্রমে, আমাদের কেবল দুটি অতিরিক্ত ফাংশন যুক্ত করতে হবে!

প্রথমত, আমাদের অস্থায়ীভাবে ইমেজ মেটাডেটাতে নিবন্ধিত সমস্ত থাম্বনেইল আকারগুলি পুনরায় প্রবর্তন করতে হবে যাতে সেগুলি বিবেচনা করা যেতে পারে:

function bi_wp_calculate_image_srcset_meta($image_meta, $size_array, $image_src, $attachment_id){
    //all registered sizes
    global $_wp_additional_image_sizes;

    //some source file specs we'll use a lot
    $src_path = get_attached_file($attachment_id);
    $src_info = pathinfo($src_path);
    $src_root = trailingslashit($src_info['dirname']);
    $src_ext = $src_info['extension'];
    $src_mime = wp_check_filetype($src_path);
    $src_mime = $src_mime['type'];
    $src_base = wp_basename($src_path, ".$src_ext");

    //find what's missing
    foreach($_wp_additional_image_sizes AS $k=>$v)
    {
        if(!isset($image_meta['sizes'][$k]))
        {
            //first, let's find out how things would play out dimensionally
            $new_size = image_resize_dimensions($image_meta['width'], $image_meta['height'], $v['width'], $v['height'], $v['crop']);
            if(!$new_size)
                continue;
            $new_w = (int) $new_size[4];
            $new_h = (int) $new_size[5];

            //bad values
            if(!$new_h || !$new_w)
                continue;

            //generate a filename the same way WP_Image_Editor would
            $new_f = wp_basename("{$src_root}{$src_base}-{$new_w}x{$new_h}." . strtolower($src_ext));

            //finally, add it!
            $image_meta['sizes'][$k] = array(
                'file'      => $new_f,
                'width'     => $new_w,
                'height'    => $new_h,
                'mime-type' => $src_mime
            );
        }
    }

    return $image_meta;
}
add_filter('wp_calculate_image_srcset_meta', 'bi_wp_calculate_image_srcset_meta', 10, 4);

তারপরে আমাদের ম্যাচগুলি চালিয়ে যাওয়া এবং যে কোনও নিখুঁত থাম্বনেইল তৈরি করতে হবে:

function bi_wp_calculate_image_srcset($sources, $size_array, $image_src, $image_meta, $attachment_id){

    //get some source info
    $src_path = get_attached_file($attachment_id);
    $src_root = trailingslashit(pathinfo($src_path, PATHINFO_DIRNAME));

    //the actual image metadata (which might be altered here)
    $src_meta = wp_get_attachment_metadata($attachment_id);

    //an array of possible sizes to search through
    $sizes = $image_meta['sizes'];
    unset($sizes['thumbnail']);
    unset($sizes['medium']);
    unset($sizes['large']);

    $new = false;

    //loop through sources
    foreach($sources AS $k=>$v)
    {
        $name = wp_basename($v['url']);
        if(!file_exists("{$src_root}{$name}"))
        {
            //find the corresponding size
            foreach($sizes AS $k2=>$v2)
            {
                //we have a match!
                if($v2['file'] === $name)
                {
                    //make it
                    if(!$resized = image_make_intermediate_size(
                        $src_path,
                        $v2['width'],
                        $v2['height'],
                        $v2['crop']
                    )){
                        //remove from sources on failure
                        unset($sources[$k]);
                    }
                    else
                    {
                        //add the new thumb to the true meta
                        $new = true;
                        $src_meta['sizes'][$k2] = $resized;
                    }

                    //remove from the sizes array so we have
                    //less to search next time
                    unset($sizes[$k2]);
                    break;
                }//match
            }//each size
        }//each 404
    }//each source

    //if we generated something, update the attachment meta
    if($new)
        wp_update_attachment_metadata($attachment_id, $src_meta);

    return $sources;
}
add_filter('wp_calculate_image_srcset', 'bi_wp_calculate_image_srcset', 10, 5);

আপনাকে জানাতে কেবল একটি শিরোনামই যে এটি কঠোর ফসল ভাঙবে! এই অপরাধীটি জানতে আমার ঘন্টা সময় লেগেছে। আমি একটি সমাধান নিয়ে কাজ করছি ...
কনস্টান্টিন গ্রো

1

আসলে, add_image_size() থাম্বনেইল তৈরি করে না, এটি কেবল ওয়ার্ডপ্রেস হিসাবে উপলব্ধ একটি চিত্র আকার নিবন্ধন করে।

সাধারণত, চিত্রটি প্রথম আপলোড করার সময় থাম্বনেইল তৈরি করা হয়। এটি একটি স্বয়ংক্রিয় প্রক্রিয়া যাতে আপনাকে সেগুলি পরে তৈরির বিষয়ে চিন্তা করতে হবে না। এটিকে এভাবে ভাবুন - ধীর সার্ভারে থাম্বনেল তৈরি করতে যদি 1-2s লাগে এবং আপনি এটির অনুরোধ না করা পর্যন্ত অপেক্ষা করেন, আপনি সামগ্রীটি সামগ্রীটি প্রতি ছবিতে অতিরিক্ত 1-2s অপেক্ষা করতে বাধ্য করুন । সময়ের আগে এটি করা অনেক সহজ - যেমন চিত্রটি আপলোড করা হয়।

একই সময়ে, আপনাকে যদি অন্য সময় থাম্বনেলগুলি একেবারে প্রসেস করতে হয় তবে আপনি ভাইপারের পুনরুত্থিত থাম্বনেইল প্লাগইনটি একবার দেখে নিতে পারেন । এটি আপনার সমস্ত চিত্রের থাম্বনেইলগুলি পুনরায় জন্মানোর জন্য অন-ডিমান্ড অ্যাকশন ব্যবহার করে ... তবে আপনি যখন প্রয়োজন তখনই থাম্বনেইল তৈরি করতে অনুরূপ কোড ব্যবহার করতে পারেন।


আমি মনে করি আপনি পয়েন্টটি পেলেন না। তিনি কোন চিত্রের জন্য থাম্বনেলগুলির প্রয়োজন তা নিয়ন্ত্রণ করতে চান। তাই কিছু চিত্রকে একেবারেই পুনরায় আকার দেওয়ার দরকার নেই।
মাতাল মাস্টার

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

1

যখন প্রয়োজন হয় তখনই অ্যাড_ইমেজ_সাইজ চালানোর কোনও উপায় আছে?

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

আমার ধারণা আপনার অতিরিক্ত মাপের যে চিত্রগুলির প্রয়োজন হয় এবং যেগুলি না হয় তার মধ্যে কীভাবে পার্থক্য করা যায় তা নির্ধারণ করা আপনার সবচেয়ে বড় চ্যালেঞ্জ।


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

1

আপনি আমার (অটোস নয়) "ডায়নামিক চিত্রের আকার পরিবর্তন করুন" 1) প্লাগইন ব্যবহার করতে পারেন ।

"ডায়নামিক ইমেজ রাইজাইজ" একটি ওয়ার্ডপ্রেস (এমইউ-) প্লাগইন যা টিমথম্বের প্রয়োজন ছাড়াই "ফ্লাইটে" ইমেজগুলিকে পুনরায় আকার দেওয়ার জন্য একটি শর্টকোড এবং একটি টেম্পলেট ট্যাগ সরবরাহ করে তবে ডাব্লুপি কোর ফাংশনগুলির সাথে।

প্লাগইনটি একটি টেম্পলেট ট্যাগ এবং একটি শর্টকোড সহ আসে ।

1) সবেমাত্র অটোস প্লাগইন সম্পর্কে সন্ধান করে। নামকরণের সংঘর্ষের উদ্দেশ্য ছিল না।


1

আপনি এই প্লাগইনটি ব্যবহার করতে পারেন: https://wordpress.org/plugins/optimize-images-resizing

এটি আপনার নিবন্ধিত চিত্রের আকারের উপর ভিত্তি করে চিত্রগুলি পুনরায় আকার দেয় তবে কেবল যখন প্রয়োজন হয়। বিদ্যমান চিত্রের আকারগুলিও পরিষ্কার করতে পারে যাতে তারা পুনরায় তৈরি করতে পারে।


0

ডব্লিউপি পারফরম্যান্স প্যাক প্লাগইনটি "উন্নত চিত্র হ্যান্ডলিং" সরবরাহ করে, যা ওটোস ডায়নামিক চিত্র প্রতিরোধকের উপর ভিত্তি করে নির্মিত হয়েছে, তবে এতে অনেকগুলি উন্নতি রয়েছে, উদাহরণস্বরূপ: সর্বপ্রথম এটি সর্বশেষতম ওয়ার্ডপ্রেস সংস্করণ (3.9.1) এর সাথে সামঞ্জস্যপূর্ণ, WP_Image_Editor ব্যবহার করে থাম্বনেইল সংরক্ষণ করতে পারে বন্ধ করা হবে (তবে সেগুলি ক্যাশে করা যায় এবং সিডিএন সমর্থন আইটেমের পথে রয়েছে), থাম্বলগুলি সংহতকরণ (বিদ্যমান থাম্বনেইলগুলি মুছতে) এবং আরও কিছু তৈরি করুন to


-1

আপনি অ্যাকোয়া রেজাইজারও চেষ্টা করতে পারেন - https://github.com/syamilmj/Aqua-Resizer/

এটি কেবল একটি ফাইল।

আপনি এটি এর মতো ব্যবহার করতে পারেন:

$img_src = aq_resize( $img_src, $width = null, $height = null, $crop = null, $single = true, $upscale = false );

$img_src = aq_resize( $img_src, 150, 150); // resized
$img_src = aq_resize( $img_src, 150, 150, true); // cropped
$img_src = aq_resize( $img_src, 150, 150, null, null, true); // image with 120x120 for example will be upscaled up to 150x150

-1

এখানে এখনও অন্য পদ্ধতি: 404 এইচটিটিপি ত্রুটি পরিচালনার জন্য এটির হুক। অর্থাৎ, যখন থাম্বনেইল উপলব্ধ নেই, আসল চিত্রটি সন্ধান করুন এবং থাম্বনেল তৈরি করুন create নোট করুন যে এটি আপনার সমস্যার সমাধান করে না, কারণ এটি আপলোড চলাকালীন থাম্বনেইল জেনারেশনকে বাধা দেয় না।

আরও মনে রাখবেন যে এই প্লাগইনটি দূষিত ব্যবহারকারীরা যে কোনও সংখ্যক থাম্বনেইল তৈরি করতে এবং এর ফলে আপনার ডিস্কের স্থান নির্গমন করতে ব্যবহার করতে পারে।

দ্রষ্টব্য: এই প্লাগইনটি সহজেই প্লাগিনসেপশন ব্যবহার করে ইনস্টল করা যায়

<?php
/*
Plugin Name: Create thumbnails on demand
Plugin URI: 
Description: Create thumbnails instead of showing 404. Use in combination with "Broken Link Checker" to create all missing thumbnails.
Version: 0.1
Author: Jack Miller
Author URI: 
License: 
License URI: 
*/
add_filter('status_header', 'createThumbIf404');
function createThumbIf404($httpCodeString) //e.g. HTTP/1.1 200 OK 
{
    global $wp_query;
    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    $httpCode = explode(" ", $httpCodeString);
    $httpCode = $httpCode[1];
    if ($httpCode == "404") {
        $requestUri = $_SERVER["REQUEST_URI"];
        $regex = '/^\/(wp-content\/uploads\/(?:[a-zA-Z0-9]*\/){2})(.*)-(.*)x(.*)\.jpg$/';
        preg_match($regex, $requestUri, $groups);
        if (sizeof($groups) === 5) {
            $baseDir  = $groups[1];
            $baseName = $groups[2];
            $sizeX    = $groups[3];
            $sizeY    = $groups[4];

            $oriImg = ctod_checkFile($baseDir, $baseName);
            if ($oriImg != null) {

                $image = wp_get_image_editor($baseDir . $oriImg);
                if (!is_wp_error($image)) {
                    $image->resize($sizeX, $sizeY, true);
                    $thumb = $baseDir . $baseName . '-' . $sizeX . 'x' . $sizeY . '.jpg';
                    $image->save($thumb);
                    ctod_sendImageAndExit($thumb);
                }
            }
        }
    }
}
//finds original image within $baseDir with $baseName.
//Returns file name including extension of original image or null.
function ctod_checkFile($baseDir, $baseName)
{
    $arr = array(
        ".jpg",
        ".JPG",
        ".jpeg",
        ".JPEG"
    );
    foreach ($arr as &$ext) {
        if (file_exists($baseDir . $baseName . $ext)) {
            return $baseName . $ext;
        }
    }
    return null;
}
//Read file at $path from disk and return it as HTTP JPG image request.
function ctod_sendImageAndExit($path)
{
    $fp = fopen($path, 'rb');
    header("Content-Type: image/jpeg");
    header("Content-Length: " . filesize($path));
    fpassthru($fp);
    exit();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.