The image to apply the filter.
You can find it here: https://drive.google.com/file/d/1pr4Sih1vFw_Smqm1c86QFgT2nGO0O3gf/view?usp=sharing
You should ulpad it on this path yourtheme/assets/images/clut.jpg
.
The image to apply the filter.
You can find it here: https://drive.google.com/file/d/1pr4Sih1vFw_Smqm1c86QFgT2nGO0O3gf/view?usp=sharing
You should ulpad it on this path yourtheme/assets/images/clut.jpg
.
<?php | |
///- - - - - - - - - - - - - - - - - - - - | |
/// Image processing references | |
/// | |
/// https://codeable.io/community/how-to-watermark-wordpress-images-with-imagemagick/ | |
/// http://ottopress.com/2011/customizing-wordpress-images/ | |
///- - - - - - - - - - - - - - - - - - - - | |
function register_precompiled_size() { | |
add_image_size( 'precompiled', 1000, 1000 ); | |
add_image_size( 'precompiled_medium', 750, 750 ); | |
add_image_size( 'precompiled_small', 500, 500 ); | |
add_image_size( 'precompiled_tiny', 250, 250 ); | |
add_image_size( 'precompiled_tinytiny', 50, 50 ); | |
} | |
add_action( 'after_setup_theme', 'register_precompiled_size' ); | |
function generate_precompiled_image( $meta ) { | |
$time = substr( $meta['file'], 0, 7); // Extract the date in form "2015/04" | |
$upload_dir = wp_upload_dir( $time ); | |
precompiled_image_log( $meta ); | |
if ( $meta['width'] >= 1000 && $meta['height'] >= 1000 ) { | |
$label = 'precompiled'; | |
} | |
else if ( $meta['width'] >= 750 && $meta['height'] >= 750 ) { | |
$label = 'precompiled_medium'; | |
} | |
else if ( $meta['width'] >= 500 && $meta['height'] >= 500 ) { | |
// add_action( 'admin_notices', array( $this, 'precompiled_error') ); | |
$label = 'precompiled_small'; | |
} | |
else if ( $meta['width'] >= 250 && $meta['height'] >= 250 ) { | |
// add_action( 'admin_notices', array( $this, 'precompiled_error') ); | |
$label = 'precompiled_tiny'; | |
} | |
else { | |
$label = 'precompiled_tinytiny'; | |
} | |
$filename = $meta['sizes'][$label]['file']; | |
$meta['sizes'][$label]['file'] = precompiled_image( $filename, $upload_dir, $label ); | |
return $meta; | |
} | |
add_filter( 'wp_generate_attachment_metadata', 'generate_precompiled_image' ); | |
function precompiled_image( $filename, $upload_dir, $label ) { | |
$original_image_path = trailingslashit( $upload_dir['path'] ) . $filename; | |
error_log( $original_image_path."\n", 3, "../debug.log"); | |
$image_resource = new Imagick( $original_image_path ); | |
$image_resource->transformImageColorspace( imagick::COLORSPACE_GRAY ); | |
$clut = new Imagick( get_template_directory().'/assets/images/clut.jpg' ); | |
$image_resource->clutImage( $clut ); | |
return save_precompiled_image( $image_resource, $original_image_path, $label ); | |
} | |
function save_precompiled_image( $image_resource, $original_image_path, $label ) { | |
$image_data = pathinfo( $original_image_path ); | |
// Drop sizes from name | |
// For example 'my-image-1400x1000' becomes 'my-image' | |
$new_image_data_filename_array = explode( '-', $image_data['filename'] ); | |
array_pop( $new_image_data_filename_array ); | |
$new_image_data_filename = implode('-', $new_image_data_filename_array); | |
$new_filename = $new_image_data_filename . '-' . $label . '.' . $image_data['extension']; | |
$precompiled_image_path = str_replace($image_data['basename'], $new_filename, $original_image_path); | |
if ( ! $image_resource->writeImage( $precompiled_image_path ) ) { | |
return $image_data['basename']; | |
} | |
unlink( $original_image_path ); | |
return $new_filename; | |
} | |
function precompiled_error() { | |
$class = 'notice notice-error'; | |
$message = "Sorry, this image cannot be uploaded. \nEach side must be longer than 1000px."; | |
printf( '<div class="%1$s"><p>%2$s</p></div>', $class, $message ); | |
} | |
function precompiled_image_log( $meta ) { | |
error_log( "\n\nGet \$meta: \n", 3, "../debug.log"); | |
error_log( print_r( $meta, true ), 3, "../debug.log"); | |
error_log( "\n ---- \n\n", 3, "../debug.log"); | |
} |
<?php | |
/* | |
Plugin Name: Precompiled Image Generator | |
Description: Plugin designed for INBAF website | |
Version: 0.0.1 | |
Author: Alessandro Barbieri | |
Author URI: http://lacolonia.studio | |
License: GPL2 | |
License URI: https://www.gnu.org/licenses/gpl-2.0.html | |
*/ | |
// https://codex.wordpress.org/Writing_a_Plugin#Plugin_Files | |
defined( 'ABSPATH' ) or die( 'No script kiddies please!' ); | |
include_once( plugin_dir_path( __FILE__ ) . 'precompilation_process.php'); | |
include_once( plugin_dir_path( __FILE__ ) . 'precompiled_image_methods.php'); |
<?php | |
///- - - - - - - - - - - - - - - - - - - - | |
/// Get the precompile version of the image | |
/// | |
/// @param obj $image The image | |
/// | |
/// @return array ( description_of_the_return_value ) | |
///- - - - - - - - - - - - - - - - - - - - | |
function precompile( $image ) { | |
// Get relative path from WP root | |
// For example: 'path/to/wp-content/uploads/2016/10' | |
$rel_path_array = explode('/', get_attached_file( $image['ID'] )); | |
array_pop( $rel_path_array ); | |
$rel_path = implode('/', $rel_path_array ).'/'; | |
// Get absolute path | |
// For example: 'http://domain.com/wp-content/uploads/2016/10' | |
$abs_path_array = explode('/', wp_get_attachment_url( $image['ID'] )); | |
array_pop( $abs_path_array ); | |
$abs_path = implode('/', $abs_path_array ).'/'; | |
// Get image name and extension | |
$img_elems = explode('.', $image['filename']); | |
$img_extension = '.'.array_pop( $img_elems ); | |
$img_name = implode('.', $img_elems ); | |
$suffix = get_precompiled_suffix( $rel_path, $img_name, $img_extension ); | |
if ( $suffix ) { $image_exists = true; } | |
else { $image_exists = false; } | |
$result = array( | |
'exists?' => $image_exists, | |
'original' => $abs_path.$img_name.$img_extension, | |
'precomplied' => $abs_path.$img_name.$suffix.$img_extension | |
); | |
return $result; | |
} | |
function get_precompiled_suffix( $rel_path, $img_name, $img_extension ) { | |
// Default value | |
$suffix = '-precompiled'; | |
// Check default value | |
// If doesn't exist change to medium | |
if ( file_exists( $rel_path.$img_name.$suffix.$img_extension ) ) { | |
return $suffix; | |
} | |
else { | |
$suffix = '-precompiled_medium'; | |
} | |
// Check medium value | |
// If doesn't exist change to small | |
if ( file_exists( $rel_path.$img_name.$suffix.$img_extension ) ) { | |
return $suffix; | |
} | |
else { | |
$suffix = '-precompiled_small'; | |
} | |
// Check small value | |
// If doesn't exist change to tiny | |
if ( file_exists( $rel_path.$img_name.$suffix.$img_extension ) ) { | |
return $suffix; | |
} | |
else { | |
$suffix = '-precompiled_tiny'; | |
} | |
// Check small value | |
// If doesn't exist change to tiny | |
if ( file_exists( $rel_path.$img_name.$suffix.$img_extension ) ) { | |
return $suffix; | |
} | |
else { | |
$suffix = '-precompiled_tinytiny'; | |
} | |
// Check tiny value | |
// If doesn't exist return to false | |
if ( file_exists( $rel_path.$img_name.$suffix.$img_extension ) ) { | |
return $suffix; | |
} | |
else { | |
return false; | |
} | |
} |