コード例 #1
0
 public function compress_image_for_bulk()
 {
     if (!$this->check_ajax_referer()) {
         exit;
     }
     if (!current_user_can('upload_files')) {
         $message = esc_html__("You don't have permission to upload files.", 'tiny-compress-images');
         echo json_encode(array('error' => $message));
         exit;
     }
     if (empty($_POST['id'])) {
         $message = esc_html__('Not a valid media file.', 'tiny-compress-images');
         echo json_encode(array('error' => $message));
         exit;
     }
     $id = intval($_POST['id']);
     $metadata = wp_get_attachment_metadata($id);
     if (!is_array($metadata)) {
         $message = esc_html__('Could not find metadata of media file.', 'tiny-compress-images');
         echo json_encode(array('error' => $message));
         exit;
     }
     $tiny_image_before = new Tiny_Image($this->settings, $id, $metadata);
     $image_statistics_before = $tiny_image_before->get_statistics();
     $size_before = $image_statistics_before['optimized_total_size'];
     $tiny_image = new Tiny_Image($this->settings, $id, $metadata);
     $result = $tiny_image->compress($this->settings);
     $image_statistics = $tiny_image->get_statistics();
     wp_update_attachment_metadata($id, $tiny_image->get_wp_metadata());
     $current_library_size = intval($_POST['current_size']);
     $size_after = $image_statistics['optimized_total_size'];
     $new_library_size = $current_library_size + $size_after - $size_before;
     $result['message'] = $tiny_image->get_latest_error();
     $result['image_sizes_optimized'] = $image_statistics['image_sizes_optimized'];
     $result['initial_total_size'] = size_format($image_statistics['initial_total_size'], 1);
     $result['optimized_total_size'] = size_format($image_statistics['optimized_total_size'], 1);
     $result['savings'] = $tiny_image->get_savings($image_statistics);
     $result['status'] = $this->settings->get_status();
     $result['thumbnail'] = wp_get_attachment_image($id, array('30', '30'), true, array('class' => 'pinkynail', 'alt' => ''));
     $result['size_change'] = $size_after - $size_before;
     $result['human_readable_library_size'] = size_format($new_library_size, 2);
     echo json_encode($result);
     exit;
 }
コード例 #2
0
 public static function get_optimization_statistics($settings, $result = null)
 {
     global $wpdb;
     if (is_null($result)) {
         // Select posts that have "_wp_attachment_metadata" image metadata
         // and optionally contain "tiny_compress_images" metadata.
         $query = "SELECT\n\t\t\t\t\t{$wpdb->posts}.ID,\n\t\t\t\t\t{$wpdb->posts}.post_title,\n\t\t\t\t\t{$wpdb->postmeta}.meta_value,\n\t\t\t\t\twp_postmeta_file.meta_value AS unique_attachment_name,\n\t\t\t\t\twp_postmeta_tiny.meta_value AS tiny_meta_value\n\t\t\t\tFROM {$wpdb->posts}\n\t\t\t\tLEFT JOIN {$wpdb->postmeta}\n\t\t\t\t\tON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id\n\t\t\t\tLEFT JOIN {$wpdb->postmeta} AS wp_postmeta_file\n\t\t\t\t\tON {$wpdb->posts}.ID = wp_postmeta_file.post_id\n\t\t\t\t\t\tAND wp_postmeta_file.meta_key = '_wp_attached_file'\n\t\t\t\tLEFT JOIN {$wpdb->postmeta} AS wp_postmeta_tiny\n\t\t\t\t\tON {$wpdb->posts}.ID = wp_postmeta_tiny.post_id\n\t\t\t\t\t\tAND wp_postmeta_tiny.meta_key = '" . self::META_KEY . "'\n\t\t\t\tWHERE {$wpdb->posts}.post_type = 'attachment'\n\t\t\t\t\tAND (\n\t\t\t\t\t\t{$wpdb->posts}.post_mime_type = 'image/jpeg' OR\n\t\t\t\t\t\t{$wpdb->posts}.post_mime_type = 'image/png'\n\t\t\t\t\t)\n\t\t\t\t\tAND {$wpdb->postmeta}.meta_key = '_wp_attachment_metadata'\n\t\t\t\tGROUP BY unique_attachment_name\n\t\t\t\tORDER BY ID DESC";
         $result = $wpdb->get_results($query, ARRAY_A);
     }
     $stats = array();
     $stats['uploaded-images'] = 0;
     $stats['optimized-image-sizes'] = 0;
     $stats['available-unoptimised-sizes'] = 0;
     $stats['optimized-library-size'] = 0;
     $stats['unoptimized-library-size'] = 0;
     $stats['available-for-optimization'] = array();
     for ($i = 0; $i < sizeof($result); $i++) {
         $wp_metadata = unserialize($result[$i]['meta_value']);
         $tiny_metadata = unserialize($result[$i]['tiny_meta_value']);
         if (!is_array($tiny_metadata)) {
             $tiny_metadata = array();
         }
         $tiny_image = new Tiny_Image($settings, $result[$i]['ID'], $wp_metadata, $tiny_metadata);
         $image_stats = $tiny_image->get_statistics();
         $stats['uploaded-images']++;
         $stats['available-unoptimised-sizes'] += $image_stats['available_unoptimized_sizes'];
         $stats['optimized-image-sizes'] += $image_stats['image_sizes_optimized'];
         $stats['optimized-library-size'] += $image_stats['optimized_total_size'];
         $stats['unoptimized-library-size'] += $image_stats['initial_total_size'];
         if ($image_stats['available_unoptimized_sizes'] > 0) {
             $stats['available-for-optimization'][] = array('ID' => $result[$i]['ID'], 'post_title' => $result[$i]['post_title']);
         }
     }
     return $stats;
 }