উপরে থেকে আমি কীভাবে add_image_size () ফসল তৈরি করতে পারি?


20

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

বর্তমানে, add_image_size () ফাংশনটি এর ফসলটি চিত্রের কেন্দ্র থেকে নিচ্ছে। সবসময় সুন্দর না !!

উত্তর:


13

মধ্যবর্তী চিত্র জেনারেশন অত্যন্ত অনমনীয়। image_resize()এটিকে কোডের কাছাকাছি রাখে এবং পুরোপুরি হুকের অভাব থাকে।

এর খুব সুন্দর একমাত্র বিকল্প হ'ল wp_generate_attachment_metadataআপনার নিজের দিয়ে ডাব্লুপি-উত্পন্ন চিত্রটি into োকানো এবং ওভাররাইট করা (যার জন্য কিছুটা image_resize()কাঁটাচামচির প্রয়োজন হবে )।

কাজের জন্য আমার এটি দরকার তাই আমি পরে কিছু কোড ভাগ করতে পারব।

ঠিক আছে, এখানে মোটামুটি, তবে কাজের উদাহরণ। নোট করুন যে এভাবে ক্রপ স্থাপনের জন্য বোঝার প্রয়োজন imagecopyresampled()

add_filter('wp_generate_attachment_metadata', 'custom_crop');

function custom_crop($metadata) {

    $uploads = wp_upload_dir();
    $file = path_join( $uploads['basedir'], $metadata['file'] ); // original image file
    list( $year, $month ) = explode( '/', $metadata['file'] );
    $target = path_join( $uploads['basedir'], "{$year}/{$month}/".$metadata['sizes']['medium']['file'] ); // intermediate size file
    $image = imagecreatefromjpeg($file); // original image resource
    $image_target = wp_imagecreatetruecolor( 44, 44 ); // blank image to fill
    imagecopyresampled($image_target, $image, 0, 0, 25, 15, 44, 44, 170, 170); // crop original
    imagejpeg($image_target, $target, apply_filters( 'jpeg_quality', 90, 'image_resize' )); // write cropped to file

    return $metadata;
}

1
অনেকটা মেসের সাথে গোলযোগের মতো শোনাচ্ছে !!
হালকা ফাজ

5
না, মূল সাথে জগাখিচির image_resizeকাজটি পরিবর্তন করা হবে। রার্স্ট পয়েন্টটি তৈরি করছিল যে আপনাকে পুনরায় আকার দেওয়ার প্রক্রিয়াটিতে ঝুঁকতে হবে, তবে নিজেই চিত্রটির আকার তৈরি করুন।
TheDeadMedic

আমি জিজ্ঞাসা করতে পারি যে এটি এখনও কাজ করে? আমি কেবল আমার ফাংশন.এফপি ফাইলটিতে হুক প্রয়োগ করেছি এবং আমার কাছে add_image_size () ফাংশন সেট আপ আছে, তবে ক্রপযুক্ত চিত্রগুলি এখনও কেন্দ্রের বাইরে ফসলযুক্ত হয়ে উঠেছে।
cr0z3r

@ cr0z3r আমি জানি যে এটি কাজ করবে না তার কোনও কারণ নেই। তবে মনে রাখবেন যে এটি অর্থবহ নির্ভরযোগ্য কোডের চেয়ে ধারণার প্রমাণের আদর্শ is
রাস্ট

এইচএম, আশ্চর্যজনকভাবে, এটি আমার থিমটিতে কাজ করে না - এটি স্থানীয়ভাবে চলার কারণে এটি হতে পারে (আমি অত্যন্ত সন্দেহ করি)? আমি এটি অনলাইনে তুলে ধরব এবং শীঘ্রই এটি আপনাকে দেখাব।
cr0z3r

13

ওয়ার্ডপ্রেস কোডেক্সের উত্তর রয়েছে, এটি নীচে রয়েছে।

চিত্রটি ক্রপ করে এবং একটি ফসলের অবস্থান নির্ধারণ করে চিত্রের আকার নির্ধারণ করুন:

add_image_size( 'custom-size', 220, 220, array( 'left', 'top' ) ); // Hard crop left top

শস্যের অবস্থান নির্ধারণ করার সময় অ্যারের প্রথম মান হ'ল এক্স অক্ষের শস্য অবস্থান, দ্বিতীয়টি y অক্ষের ক্রপ অবস্থান।

x_crop_position 'বাম' 'কেন্দ্র', বা 'ডান' গ্রহণ করে। y_crop_position 'শীর্ষ', 'কেন্দ্র', বা 'নীচে' গ্রহণ করে। ডিফল্টরূপে, হার্ড ক্রপ মোড ব্যবহার করার সময় এই মানগুলি 'সেন্টারে' ডিফল্ট হয়।

এবং কোডেক্স এমন একটি পৃষ্ঠা উল্লেখ করে যা দেখায় যে শস্যের অবস্থানগুলি কীভাবে কাজ করে।

http://havecamerawilltravel.com/photographer/wordpress-thumbnail-crop


এটি দুর্দান্ত, আমার গ্রহণযোগ্য উত্তর হওয়া উচিত, আমি মনে করি!
ডাল্টন

7

আমি এই সমস্যার একটি সমাধান তৈরি করেছি যার মূল হ্যাকিংয়ের প্রয়োজন নেই: http://bradt.ca/archives/image-crop-position-in-wordpress/

আমি কোরটিতে একটি প্যাচও জমা দিয়েছি: http://core.trac.wordpress.org/ticket/19393

মূলটিতে যুক্ত হওয়ার জন্য আপনার সমর্থন দেখানোর জন্য নিজেকে টিকিটে সিসি হিসাবে যুক্ত করুন।


2
@ রাস্টের সমাধানটি মূল ফাইলগুলিকেও পরিবর্তন করে না। ;)
ফুক্সিয়া

1
@ টসচো আমি অনুমান করি যে তার অর্থ এই নয় যে অন্য উত্তরগুলি মূল কোড পরিবর্তন করে।
কায়সার


0

বিকল্প সমাধান এখানে: http://pixert.com/blog/cropping-post-featured-thumbnails-from-top-instead-of-center-in-wordpress-with-native-cropping-tool/

কেবল এই কোডগুলিকে ফাংশন.এফপি-তে যুক্ত করুন, তারপরে "পুনরায় তৈরি থাম্বনেইলস" প্লাগইন ( https://wordpress.org/plugins/regenerate-thumbnails/ ) ব্যবহার করুন:

function px_image_resize_dimensions( $payload, $orig_w, $orig_h, $dest_w, $dest_h, $crop ){

// Change this to a conditional that decides whether you want to override the defaults for this image or not.
if( false )
return $payload;

if ( $crop ) {
// crop the largest possible portion of the original image that we can size to $dest_w x $dest_h
$aspect_ratio = $orig_w / $orig_h;
$new_w = min($dest_w, $orig_w);
$new_h = min($dest_h, $orig_h);

if ( !$new_w ) {
$new_w = intval($new_h * $aspect_ratio);
}

if ( !$new_h ) {
$new_h = intval($new_w / $aspect_ratio);
}

$size_ratio = max($new_w / $orig_w, $new_h / $orig_h);

$crop_w = round($new_w / $size_ratio);
$crop_h = round($new_h / $size_ratio);

$s_x = 0; // [[ formerly ]] ==> floor( ($orig_w - $crop_w) / 2 );
$s_y = 0; // [[ formerly ]] ==> floor( ($orig_h - $crop_h) / 2 );
} else {
// don't crop, just resize using $dest_w x $dest_h as a maximum bounding box
$crop_w = $orig_w;
$crop_h = $orig_h;

$s_x = 0;
$s_y = 0;

list( $new_w, $new_h ) = wp_constrain_dimensions( $orig_w, $orig_h, $dest_w, $dest_h );
}

// if the resulting image would be the same size or larger we don't want to resize it
if ( $new_w >= $orig_w && $new_h >= $orig_h )
return false;

// the return array matches the parameters to imagecopyresampled()
// int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h
return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );

}
add_filter( 'image_resize_dimensions', 'px_image_resize_dimensions', 10, 6 );

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