मैं ऊपर से add_image_size () फसल कैसे बना सकता हूं?


20

मेरे पास पोस्ट की एक श्रृंखला है, जिसमें सभी चित्रित छवियां हैं, लेकिन मुझे फसल के शीर्ष दाएं कोने को अनुकूलित करने में सक्षम होने की आवश्यकता है। इस उदाहरण में, मुझे उन्हें शीर्ष दाईं ओर से क्रॉप करने की आवश्यकता है, लेकिन यह भी उपयोगी होगा कि उस स्थिति को कैसे इंगित किया जाए।

वर्तमान में, add_image_size () फ़ंक्शन छवि के केंद्र से अपनी फसल ले रहा है। हमेशा सुंदर नहीं !!

जवाबों:


13

मध्यवर्ती छवि निर्माण अत्यंत कठोर है। image_resize()यह कोड के करीब रहता है और पूरी तरह से हुक का अभाव है।

इसके लिए बहुत ही एकमात्र विकल्प है wp_generate_attachment_metadataअपने स्वयं के साथ WP-जनरेट की गई छवि को हुक करना और उसे अधिलेखित करना (जिसमें थोड़े से 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फ़ंक्शन बदल जाएगा । Rarst यह संकेत दे रहा था कि आपको आकार बदलने की प्रक्रिया में शामिल होना होगा, लेकिन छवि का आकार स्वयं बनाएं।
TheDeadMedic

मैं पूछ सकता हूं कि क्या यह अभी भी काम करता है? मैंने सिर्फ हुक को अपने फ़ंक्शन में लागू किया है। एफपी फ़ाइल और मेरे पास add_image_size () फ़ंक्शन सेट-अप हैं, लेकिन क्रॉप किए गए चित्र अभी भी क्रॉप किए गए फॉर्म को केंद्र से बाहर निकालते हैं।
cr0z3r

@ cr0z3r मुझे कोई कारण नहीं पता कि यह काम क्यों नहीं करेगा। लेकिन ध्यान दें कि यह केवल विश्वसनीय विश्वसनीय कोड के बजाय मोटे तौर पर अवधारणा का उदाहरण है।
रारस्ट

हम्म, अजीब तरह से, यह मेरे विषय पर काम नहीं करता है - क्या ऐसा इसलिए हो सकता है क्योंकि मैं स्थानीय रूप से चल रहा था (मुझे इस पर अत्यधिक संदेह है)? मैं इसे ऑनलाइन करूंगा और जल्द ही इसे दिखाऊंगा।
cr0z3r

13

वर्डप्रेस कोडेक्स का जवाब है, इसके नीचे।

छवि को क्रॉप करके और फसल की स्थिति को परिभाषित करके छवि का आकार निर्धारित करें:

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

फसल की स्थिति निर्धारित करते समय, सरणी में पहला मान x अक्ष फसल की स्थिति है, दूसरा 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
@ Rarst का समाधान कोर फ़ाइलों को भी नहीं बदलता है। ;)
FUXIA

1
@toscho मुझे लगता है कि उनका मतलब यह नहीं था कि अन्य उत्तर कोर कोड को बदल देते हैं।
कैसर


0

वैकल्पिक समाधान यहां: http://pixert.com/blog/cropping-post-featured-thumbnails-from-top-instead-of-center-in-wordpress-with-native-cropping-pool/

बस इस कोड को functions.php में जोड़ें, फिर "Regenerate Thumbnails" प्लगइन ( 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 );

हाय Niente0, WPSE में आपका स्वागत है और आपके उत्तर के लिए धन्यवाद। क्या आप अपने कोड को समझाने के लिए अपने पोस्ट का संपादन करना चाहेंगे? StackExchange साइटों पर पोस्ट को उनके समाधान की व्याख्या करनी चाहिए, और केवल ऑफ़साइट लिंक को संदर्भ के रूप में शामिल करना चाहिए, संपूर्ण समाधान के रूप में नहीं। एक बार फिर धन्यवाद!
टिम मालोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.