web/wp-admin/includes/image-edit.php
author ymh <ymh.work@gmail.com>
Mon, 22 Mar 2010 16:36:28 +0100
changeset 5 ac511f1ccc8e
parent 1 0d28b7c10758
permissions -rw-r--r--
add hgignore
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0d28b7c10758 First commit
ymh
parents:
diff changeset
     1
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     2
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
     3
 * WordPress Image Editor
0d28b7c10758 First commit
ymh
parents:
diff changeset
     4
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
     5
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
     6
 * @subpackage Administration
0d28b7c10758 First commit
ymh
parents:
diff changeset
     7
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
     8
0d28b7c10758 First commit
ymh
parents:
diff changeset
     9
function wp_image_editor($post_id, $msg = false) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    10
	$nonce = wp_create_nonce("image_editor-$post_id");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    11
	$meta = wp_get_attachment_metadata($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    12
	$thumb = image_get_intermediate_size($post_id, 'thumbnail');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    13
	$sub_sizes = isset($meta['sizes']) && is_array($meta['sizes']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    14
	$note = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    15
0d28b7c10758 First commit
ymh
parents:
diff changeset
    16
	if ( is_array($meta) && isset($meta['width']) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    17
		$big = max( $meta['width'], $meta['height'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    18
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    19
		die( __('Image data does not exist. Please re-upload the image.') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    20
0d28b7c10758 First commit
ymh
parents:
diff changeset
    21
	$sizer = $big > 400 ? 400 / $big : 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    22
0d28b7c10758 First commit
ymh
parents:
diff changeset
    23
	$backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    24
	$can_restore = !empty($backup_sizes) && isset($backup_sizes['full-orig'])
0d28b7c10758 First commit
ymh
parents:
diff changeset
    25
		&& $backup_sizes['full-orig']['file'] != basename($meta['file']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    26
0d28b7c10758 First commit
ymh
parents:
diff changeset
    27
	if ( $msg ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    28
		if ( isset($msg->error) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    29
			$note = "<div class='error'><p>$msg->error</p></div>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    30
		elseif ( isset($msg->msg) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    31
			$note = "<div class='updated'><p>$msg->msg</p></div>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    32
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    33
0d28b7c10758 First commit
ymh
parents:
diff changeset
    34
	?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    35
	<div class="imgedit-wrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    36
	<?php echo $note; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    37
	<table id="imgedit-panel-<?php echo $post_id; ?>"><tbody>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    38
	<tr><td>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    39
	<div class="imgedit-menu">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    40
		<div onclick="imageEdit.crop(<?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-crop disabled" title="<?php esc_attr_e( 'Crop' ); ?>"></div><?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
    41
0d28b7c10758 First commit
ymh
parents:
diff changeset
    42
	// On some setups GD library does not provide imagerotate() - Ticket #11536   
0d28b7c10758 First commit
ymh
parents:
diff changeset
    43
	if ( function_exists('imagerotate') ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    44
		<div class="imgedit-rleft"  onclick="imageEdit.rotate( 90, <?php echo "$post_id, '$nonce'"; ?>, this)" title="<?php esc_attr_e( 'Rotate counter-clockwise' ); ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    45
		<div class="imgedit-rright" onclick="imageEdit.rotate(-90, <?php echo "$post_id, '$nonce'"; ?>, this)" title="<?php esc_attr_e( 'Rotate clockwise' ); ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    46
<?php } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    47
		$note_gdlib = esc_attr__('Image rotation is not supported by your web host (function imagerotate() is missing)');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    48
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    49
	    <div class="imgedit-rleft disabled"  title="<?php echo $note_gdlib; ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    50
	    <div class="imgedit-rright disabled" title="<?php echo $note_gdlib; ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    51
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    52
0d28b7c10758 First commit
ymh
parents:
diff changeset
    53
		<div onclick="imageEdit.flip(1, <?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-flipv" title="<?php esc_attr_e( 'Flip vertically' ); ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    54
		<div onclick="imageEdit.flip(2, <?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-fliph" title="<?php esc_attr_e( 'Flip horizontally' ); ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    55
0d28b7c10758 First commit
ymh
parents:
diff changeset
    56
		<div id="image-undo-<?php echo $post_id; ?>" onclick="imageEdit.undo(<?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-undo disabled" title="<?php esc_attr_e( 'Undo' ); ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    57
		<div id="image-redo-<?php echo $post_id; ?>" onclick="imageEdit.redo(<?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-redo disabled" title="<?php esc_attr_e( 'Redo' ); ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    58
		<br class="clear" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    59
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    60
0d28b7c10758 First commit
ymh
parents:
diff changeset
    61
	<input type="hidden" id="imgedit-sizer-<?php echo $post_id; ?>" value="<?php echo $sizer; ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    62
	<input type="hidden" id="imgedit-minthumb-<?php echo $post_id; ?>" value="<?php echo ( get_option('thumbnail_size_w') . ':' . get_option('thumbnail_size_h') ); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    63
	<input type="hidden" id="imgedit-history-<?php echo $post_id; ?>" value="" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    64
	<input type="hidden" id="imgedit-undone-<?php echo $post_id; ?>" value="0" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    65
	<input type="hidden" id="imgedit-selection-<?php echo $post_id; ?>" value="" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    66
	<input type="hidden" id="imgedit-x-<?php echo $post_id; ?>" value="<?php echo $meta['width']; ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    67
	<input type="hidden" id="imgedit-y-<?php echo $post_id; ?>" value="<?php echo $meta['height']; ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    68
0d28b7c10758 First commit
ymh
parents:
diff changeset
    69
	<div id="imgedit-crop-<?php echo $post_id; ?>" class="imgedit-crop-wrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    70
	<img id="image-preview-<?php echo $post_id; ?>" onload="imageEdit.imgLoaded('<?php echo $post_id; ?>')" src="<?php echo admin_url('admin-ajax.php'); ?>?action=imgedit-preview&amp;_ajax_nonce=<?php echo $nonce; ?>&amp;postid=<?php echo $post_id; ?>&amp;rand=<?php echo rand(1, 99999); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    71
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    72
0d28b7c10758 First commit
ymh
parents:
diff changeset
    73
	<div class="imgedit-submit">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    74
		<input type="button" onclick="imageEdit.close(<?php echo $post_id; ?>, 1)" class="button" value="<?php esc_attr_e( 'Cancel' ); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    75
		<input type="button" onclick="imageEdit.save(<?php echo "$post_id, '$nonce'"; ?>)" disabled="disabled" class="button-primary imgedit-submit-btn" value="<?php esc_attr_e( 'Save' ); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    76
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    77
	</td>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    78
0d28b7c10758 First commit
ymh
parents:
diff changeset
    79
	<td class="imgedit-settings">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    80
	<div class="imgedit-group">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    81
	<div class="imgedit-group-top">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    82
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><strong><?php _e('Scale Image'); ?></strong></a>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    83
		<div class="imgedit-help">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    84
		<p><?php _e('You can proportionally scale the original image. For best results the scaling should be done before performing any other operations on it like crop, rotate, etc. Note that if you make the image larger it may become fuzzy.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    85
		<p><?php printf( __('Original dimensions %s'), $meta['width'] . '&times;' . $meta['height'] ); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    86
		<div class="imgedit-submit">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    87
		<span class="nowrap"><input type="text" id="imgedit-scale-width-<?php echo $post_id; ?>" onkeyup="imageEdit.scaleChanged(<?php echo $post_id; ?>, 1)" onblur="imageEdit.scaleChanged(<?php echo $post_id; ?>, 1)" style="width:4em;" value="<?php echo $meta['width']; ?>" />&times;<input type="text" id="imgedit-scale-height-<?php echo $post_id; ?>" onkeyup="imageEdit.scaleChanged(<?php echo $post_id; ?>, 0)" onblur="imageEdit.scaleChanged(<?php echo $post_id; ?>, 0)" style="width:4em;" value="<?php echo $meta['height']; ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    88
		<span class="imgedit-scale-warn" id="imgedit-scale-warn-<?php echo $post_id; ?>">!</span></span>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    89
		<input type="button" onclick="imageEdit.action(<?php echo "$post_id, '$nonce'"; ?>, 'scale')" class="button-primary" value="<?php esc_attr_e( 'Scale' ); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
    90
		</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    91
		</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    92
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    93
0d28b7c10758 First commit
ymh
parents:
diff changeset
    94
<?php if ( $can_restore ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    95
0d28b7c10758 First commit
ymh
parents:
diff changeset
    96
	<div class="imgedit-group-top">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    97
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><strong><?php _e('Restore Original Image'); ?></strong></a>
0d28b7c10758 First commit
ymh
parents:
diff changeset
    98
		<div class="imgedit-help">
0d28b7c10758 First commit
ymh
parents:
diff changeset
    99
		<p><?php _e('Discard any changes and restore the original image.'); 
0d28b7c10758 First commit
ymh
parents:
diff changeset
   100
0d28b7c10758 First commit
ymh
parents:
diff changeset
   101
		if ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   102
			_e(' Previously edited copies of the image will not be deleted.');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   103
0d28b7c10758 First commit
ymh
parents:
diff changeset
   104
		?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   105
		<div class="imgedit-submit">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   106
		<input type="button" onclick="imageEdit.action(<?php echo "$post_id, '$nonce'"; ?>, 'restore')" class="button-primary" value="<?php esc_attr_e( 'Restore image' ); ?>" <?php echo $can_restore; ?> />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   107
		</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   108
		</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   109
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   110
0d28b7c10758 First commit
ymh
parents:
diff changeset
   111
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   112
0d28b7c10758 First commit
ymh
parents:
diff changeset
   113
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   114
0d28b7c10758 First commit
ymh
parents:
diff changeset
   115
	<div class="imgedit-group">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   116
	<div class="imgedit-group-top">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   117
		<strong><?php _e('Image Crop'); ?></strong>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   118
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><?php _e('(help)'); ?></a>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   119
		<div class="imgedit-help">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   120
		<p><?php _e('The image can be cropped by clicking on it and dragging to select the desired part. While dragging the dimensions of the selection are displayed below.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   121
		<strong><?php _e('Keyboard shortcuts'); ?></strong>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   122
		<ul>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   123
		<li><?php _e('Arrow: move by 10px'); ?></li>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   124
		<li><?php _e('Shift + arrow: move by 1px'); ?></li>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   125
		<li><?php _e('Ctrl + arrow: resize by 10px'); ?></li>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   126
		<li><?php _e('Ctrl + Shift + arrow: resize by 1px'); ?></li>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   127
		<li><?php _e('Shift + drag: lock aspect ratio'); ?></li>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   128
		</ul>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   129
0d28b7c10758 First commit
ymh
parents:
diff changeset
   130
		<p><strong><?php _e('Crop Aspect Ratio'); ?></strong><br />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   131
		<?php _e('You can specify the crop selection aspect ratio then hold down the Shift key while dragging to lock it. The values can be 1:1 (square), 4:3, 16:9, etc. If there is a selection, specifying aspect ratio will set it immediately.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   132
0d28b7c10758 First commit
ymh
parents:
diff changeset
   133
		<p><strong><?php _e('Crop Selection'); ?></strong><br />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   134
		<?php _e('Once started, the selection can be adjusted by entering new values (in pixels). Note that these values are scaled to approximately match the original image dimensions. The minimum selection size equals the thumbnail size as set in the Media settings.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   135
		</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   136
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   137
0d28b7c10758 First commit
ymh
parents:
diff changeset
   138
	<p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   139
		<?php _e('Aspect ratio:'); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   140
		<span  class="nowrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   141
		<input type="text" id="imgedit-crop-width-<?php echo $post_id; ?>" onkeyup="imageEdit.setRatioSelection(<?php echo $post_id; ?>, 0, this)" style="width:3em;" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   142
		:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   143
		<input type="text" id="imgedit-crop-height-<?php echo $post_id; ?>" onkeyup="imageEdit.setRatioSelection(<?php echo $post_id; ?>, 1, this)" style="width:3em;" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   144
		</span>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   145
	</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   146
0d28b7c10758 First commit
ymh
parents:
diff changeset
   147
	<p id="imgedit-crop-sel-<?php echo $post_id; ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   148
		<?php _e('Selection:'); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   149
		<span  class="nowrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   150
		<input type="text" id="imgedit-sel-width-<?php echo $post_id; ?>" onkeyup="imageEdit.setNumSelection(<?php echo $post_id; ?>)" style="width:4em;" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   151
		:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   152
		<input type="text" id="imgedit-sel-height-<?php echo $post_id; ?>" onkeyup="imageEdit.setNumSelection(<?php echo $post_id; ?>)" style="width:4em;" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   153
		</span>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   154
	</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   155
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   156
0d28b7c10758 First commit
ymh
parents:
diff changeset
   157
	<?php if ( $thumb && $sub_sizes ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   158
		$thumb_img = wp_constrain_dimensions( $thumb['width'], $thumb['height'], 160, 120 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   159
	?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   160
0d28b7c10758 First commit
ymh
parents:
diff changeset
   161
	<div class="imgedit-group imgedit-applyto">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   162
	<div class="imgedit-group-top">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   163
		<strong><?php _e('Thumbnail Settings'); ?></strong>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   164
		<a class="imgedit-help-toggle" onclick="imageEdit.toggleHelp(this);return false;" href="#"><?php _e('(help)'); ?></a>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   165
		<p class="imgedit-help"><?php _e('The thumbnail image can be cropped differently. For example it can be square or contain only a portion of the original image to showcase it better. Here you can select whether to apply changes to all image sizes or make the thumbnail different.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   166
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   167
0d28b7c10758 First commit
ymh
parents:
diff changeset
   168
	<p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   169
		<img src="<?php echo $thumb['url']; ?>" width="<?php echo $thumb_img[0]; ?>" height="<?php echo $thumb_img[1]; ?>" class="imgedit-size-preview" alt="" /><br /><?php _e('Current thumbnail'); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   170
	</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   171
0d28b7c10758 First commit
ymh
parents:
diff changeset
   172
	<p id="imgedit-save-target-<?php echo $post_id; ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   173
		<strong><?php _e('Apply changes to:'); ?></strong><br />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   174
0d28b7c10758 First commit
ymh
parents:
diff changeset
   175
		<label class="imgedit-label">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   176
		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="all" checked="checked" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   177
		<?php _e('All image sizes'); ?></label>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   178
0d28b7c10758 First commit
ymh
parents:
diff changeset
   179
		<label class="imgedit-label">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   180
		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="thumbnail" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   181
		<?php _e('Thumbnail'); ?></label>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   182
0d28b7c10758 First commit
ymh
parents:
diff changeset
   183
		<label class="imgedit-label">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   184
		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="nothumb" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   185
		<?php _e('All sizes except thumbnail'); ?></label>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   186
	</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   187
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   188
0d28b7c10758 First commit
ymh
parents:
diff changeset
   189
	<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   190
0d28b7c10758 First commit
ymh
parents:
diff changeset
   191
	</td></tr>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   192
	</tbody></table>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   193
	<div class="imgedit-wait" id="imgedit-wait-<?php echo $post_id; ?>"></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   194
	<script type="text/javascript">imageEdit.init(<?php echo $post_id; ?>);</script>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   195
	<div class="hidden" id="imgedit-leaving-<?php echo $post_id; ?>"><?php _e("There are unsaved changes that will be lost.  'OK' to continue, 'Cancel' to return to the Image Editor."); ?></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   196
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   197
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   198
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   199
0d28b7c10758 First commit
ymh
parents:
diff changeset
   200
function load_image_to_edit($post_id, $mime_type, $size = 'full') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   201
	$filepath = get_attached_file($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   202
0d28b7c10758 First commit
ymh
parents:
diff changeset
   203
	if ( $filepath && file_exists($filepath) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   204
		if ( 'full' != $size && ( $data = image_get_intermediate_size($post_id, $size) ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   205
			$filepath = path_join( dirname($filepath), $data['file'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   206
	} elseif ( WP_Http_Fopen::test() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   207
		$filepath = wp_get_attachment_url($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   208
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   209
0d28b7c10758 First commit
ymh
parents:
diff changeset
   210
	$filepath = apply_filters('load_image_to_edit_path', $filepath, $post_id, $size);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   211
	if ( empty($filepath) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   212
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   213
0d28b7c10758 First commit
ymh
parents:
diff changeset
   214
	switch ( $mime_type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   215
		case 'image/jpeg':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   216
			$image = imagecreatefromjpeg($filepath);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   217
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   218
		case 'image/png':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   219
			$image = imagecreatefrompng($filepath);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   220
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   221
		case 'image/gif':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   222
			$image = imagecreatefromgif($filepath);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   223
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   224
		default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   225
			$image = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   226
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   227
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   228
	if ( is_resource($image) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   229
		$image = apply_filters('load_image_to_edit', $image, $post_id, $size);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   230
		if ( function_exists('imagealphablending') && function_exists('imagesavealpha') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   231
			imagealphablending($image, false);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   232
			imagesavealpha($image, true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   233
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   234
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   235
	return $image;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   236
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   237
0d28b7c10758 First commit
ymh
parents:
diff changeset
   238
function wp_stream_image($image, $mime_type, $post_id) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   239
	$image = apply_filters('image_save_pre', $image, $post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   240
0d28b7c10758 First commit
ymh
parents:
diff changeset
   241
	switch ( $mime_type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   242
		case 'image/jpeg':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   243
			header('Content-Type: image/jpeg');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   244
			return imagejpeg($image, null, 90);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   245
		case 'image/png':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   246
			header('Content-Type: image/png');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   247
			return imagepng($image);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   248
		case 'image/gif':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   249
			header('Content-Type: image/gif');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   250
			return imagegif($image);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   251
		default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   252
			return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   253
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   254
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   255
0d28b7c10758 First commit
ymh
parents:
diff changeset
   256
function wp_save_image_file($filename, $image, $mime_type, $post_id) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   257
	$image = apply_filters('image_save_pre', $image, $post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   258
	$saved = apply_filters('wp_save_image_file', null, $filename, $image, $mime_type, $post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   259
	if ( null !== $saved )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   260
		return $saved;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   261
0d28b7c10758 First commit
ymh
parents:
diff changeset
   262
	switch ( $mime_type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   263
		case 'image/jpeg':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   264
			return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   265
		case 'image/png':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   266
			return imagepng($image, $filename);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   267
		case 'image/gif':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   268
			return imagegif($image, $filename);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   269
		default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   270
			return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   271
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   272
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   273
0d28b7c10758 First commit
ymh
parents:
diff changeset
   274
function _image_get_preview_ratio($w, $h) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   275
	$max = max($w, $h);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   276
	return $max > 400 ? (400 / $max) : 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   277
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   278
0d28b7c10758 First commit
ymh
parents:
diff changeset
   279
function _rotate_image_resource($img, $angle) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   280
	if ( function_exists('imagerotate') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   281
		$rotated = imagerotate($img, $angle, 0);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   282
		if ( is_resource($rotated) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   283
			imagedestroy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   284
			$img = $rotated;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   285
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   286
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   287
	return $img;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   288
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   289
0d28b7c10758 First commit
ymh
parents:
diff changeset
   290
0d28b7c10758 First commit
ymh
parents:
diff changeset
   291
function _flip_image_resource($img, $horz, $vert) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   292
	$w = imagesx($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   293
	$h = imagesy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   294
	$dst = wp_imagecreatetruecolor($w, $h);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   295
	if ( is_resource($dst) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   296
		$sx = $vert ? ($w - 1) : 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   297
		$sy = $horz ? ($h - 1) : 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   298
		$sw = $vert ? -$w : $w;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   299
		$sh = $horz ? -$h : $h;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   300
0d28b7c10758 First commit
ymh
parents:
diff changeset
   301
		if ( imagecopyresampled($dst, $img, 0, 0, $sx, $sy, $w, $h, $sw, $sh) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   302
			imagedestroy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   303
			$img = $dst;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   304
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   305
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   306
	return $img;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   307
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   308
0d28b7c10758 First commit
ymh
parents:
diff changeset
   309
function _crop_image_resource($img, $x, $y, $w, $h) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   310
	$dst = wp_imagecreatetruecolor($w, $h);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   311
	if ( is_resource($dst) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   312
		if ( imagecopy($dst, $img, 0, 0, $x, $y, $w, $h) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   313
			imagedestroy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   314
			$img = $dst;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   315
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   316
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   317
	return $img;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   318
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   319
0d28b7c10758 First commit
ymh
parents:
diff changeset
   320
function image_edit_apply_changes($img, $changes) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   321
0d28b7c10758 First commit
ymh
parents:
diff changeset
   322
	if ( !is_array($changes) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   323
		return $img;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   324
0d28b7c10758 First commit
ymh
parents:
diff changeset
   325
	// expand change operations
0d28b7c10758 First commit
ymh
parents:
diff changeset
   326
	foreach ( $changes as $key => $obj ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   327
		if ( isset($obj->r) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   328
			$obj->type = 'rotate';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   329
			$obj->angle = $obj->r;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   330
			unset($obj->r);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   331
		} elseif ( isset($obj->f) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   332
			$obj->type = 'flip';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   333
			$obj->axis = $obj->f;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   334
			unset($obj->f);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   335
		} elseif ( isset($obj->c) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   336
			$obj->type = 'crop';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   337
			$obj->sel = $obj->c;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   338
			unset($obj->c);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   339
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   340
		$changes[$key] = $obj;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   341
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   342
0d28b7c10758 First commit
ymh
parents:
diff changeset
   343
	// combine operations
0d28b7c10758 First commit
ymh
parents:
diff changeset
   344
	if ( count($changes) > 1 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   345
		$filtered = array($changes[0]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   346
		for ( $i = 0, $j = 1; $j < count($changes); $j++ ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   347
			$combined = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   348
			if ( $filtered[$i]->type == $changes[$j]->type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   349
				switch ( $filtered[$i]->type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   350
					case 'rotate':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   351
						$filtered[$i]->angle += $changes[$j]->angle;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   352
						$combined = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   353
						break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   354
					case 'flip':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   355
						$filtered[$i]->axis ^= $changes[$j]->axis;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   356
						$combined = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   357
						break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   358
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   359
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   360
			if ( !$combined )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   361
				$filtered[++$i] = $changes[$j];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   362
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   363
		$changes = $filtered;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   364
		unset($filtered);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   365
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   366
0d28b7c10758 First commit
ymh
parents:
diff changeset
   367
	// image resource before applying the changes
0d28b7c10758 First commit
ymh
parents:
diff changeset
   368
	$img = apply_filters('image_edit_before_change', $img, $changes);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   369
0d28b7c10758 First commit
ymh
parents:
diff changeset
   370
	foreach ( $changes as $operation ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   371
		switch ( $operation->type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   372
			case 'rotate':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   373
				if ( $operation->angle != 0 )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   374
					$img = _rotate_image_resource($img, $operation->angle);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   375
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   376
			case 'flip':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   377
				if ( $operation->axis != 0 )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   378
					$img = _flip_image_resource($img, ($operation->axis & 1) != 0, ($operation->axis & 2) != 0);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   379
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   380
			case 'crop':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   381
				$sel = $operation->sel;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   382
				$scale = 1 / _image_get_preview_ratio( imagesx($img), imagesy($img) ); // discard preview scaling
0d28b7c10758 First commit
ymh
parents:
diff changeset
   383
				$img = _crop_image_resource($img, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   384
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   385
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   386
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   387
0d28b7c10758 First commit
ymh
parents:
diff changeset
   388
	return $img;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   389
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   390
0d28b7c10758 First commit
ymh
parents:
diff changeset
   391
function stream_preview_image($post_id) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   392
	$post = get_post($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   393
	@ini_set('memory_limit', '256M');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   394
	$img = load_image_to_edit( $post_id, $post->post_mime_type, array(400, 400) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   395
0d28b7c10758 First commit
ymh
parents:
diff changeset
   396
	if ( !is_resource($img) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   397
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   398
0d28b7c10758 First commit
ymh
parents:
diff changeset
   399
	$changes = !empty($_REQUEST['history']) ? json_decode( stripslashes($_REQUEST['history']) ) : null;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   400
	if ( $changes )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   401
		$img = image_edit_apply_changes($img, $changes);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   402
0d28b7c10758 First commit
ymh
parents:
diff changeset
   403
	// scale the image
0d28b7c10758 First commit
ymh
parents:
diff changeset
   404
	$w = imagesx($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   405
	$h = imagesy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   406
	$ratio = _image_get_preview_ratio($w, $h);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   407
	$w2 = $w * $ratio;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   408
	$h2 = $h * $ratio;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   409
0d28b7c10758 First commit
ymh
parents:
diff changeset
   410
	$preview = wp_imagecreatetruecolor($w2, $h2);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   411
	imagecopyresampled( $preview, $img, 0, 0, 0, 0, $w2, $h2, $w, $h );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   412
	wp_stream_image($preview, $post->post_mime_type, $post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   413
0d28b7c10758 First commit
ymh
parents:
diff changeset
   414
	imagedestroy($preview);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   415
	imagedestroy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   416
	return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   417
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   418
0d28b7c10758 First commit
ymh
parents:
diff changeset
   419
function wp_restore_image($post_id) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   420
	$meta = wp_get_attachment_metadata($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   421
	$file = get_attached_file($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   422
	$backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   423
	$restored = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   424
	$msg = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   425
0d28b7c10758 First commit
ymh
parents:
diff changeset
   426
	if ( !is_array($backup_sizes) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   427
		$msg->error = __('Cannot load image metadata.');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   428
		return $msg;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   429
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   430
0d28b7c10758 First commit
ymh
parents:
diff changeset
   431
	$parts = pathinfo($file);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   432
	$suffix = time() . rand(100, 999);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   433
	$default_sizes = apply_filters( 'intermediate_image_sizes', array('large', 'medium', 'thumbnail') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   434
0d28b7c10758 First commit
ymh
parents:
diff changeset
   435
	if ( isset($backup_sizes['full-orig']) && is_array($backup_sizes['full-orig']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   436
		$data = $backup_sizes['full-orig'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   437
0d28b7c10758 First commit
ymh
parents:
diff changeset
   438
		if ( $parts['basename'] != $data['file'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   439
			if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   440
				// delete only if it's edited image
0d28b7c10758 First commit
ymh
parents:
diff changeset
   441
				if ( preg_match('/-e[0-9]{13}\./', $parts['basename']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   442
					$delpath = apply_filters('wp_delete_file', $file);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   443
					@unlink($delpath);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   444
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   445
			} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   446
				$backup_sizes["full-$suffix"] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $parts['basename']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   447
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   448
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   449
0d28b7c10758 First commit
ymh
parents:
diff changeset
   450
		$restored_file = path_join($parts['dirname'], $data['file']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   451
		$restored = update_attached_file($post_id, $restored_file);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   452
0d28b7c10758 First commit
ymh
parents:
diff changeset
   453
		$meta['file'] = _wp_relative_upload_path( $restored_file );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   454
		$meta['width'] = $data['width'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   455
		$meta['height'] = $data['height'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   456
		list ( $uwidth, $uheight ) = wp_shrink_dimensions($meta['width'], $meta['height']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   457
		$meta['hwstring_small'] = "height='$uheight' width='$uwidth'";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   458
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   459
0d28b7c10758 First commit
ymh
parents:
diff changeset
   460
	foreach ( $default_sizes as $default_size ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   461
		if ( isset($backup_sizes["$default_size-orig"]) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   462
			$data = $backup_sizes["$default_size-orig"];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   463
			if ( isset($meta['sizes'][$default_size]) && $meta['sizes'][$default_size]['file'] != $data['file'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   464
				if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   465
					// delete only if it's edited image
0d28b7c10758 First commit
ymh
parents:
diff changeset
   466
					if ( preg_match('/-e[0-9]{13}-/', $meta['sizes'][$default_size]['file']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   467
						$delpath = apply_filters( 'wp_delete_file', path_join($parts['dirname'], $meta['sizes'][$default_size]['file']) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   468
						@unlink($delpath);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   469
					}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   470
				} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   471
					$backup_sizes["$default_size-{$suffix}"] = $meta['sizes'][$default_size];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   472
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   473
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   474
0d28b7c10758 First commit
ymh
parents:
diff changeset
   475
			$meta['sizes'][$default_size] = $data;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   476
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   477
			unset($meta['sizes'][$default_size]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   478
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   479
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   480
0d28b7c10758 First commit
ymh
parents:
diff changeset
   481
	if ( !wp_update_attachment_metadata($post_id, $meta) || !update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   482
		$msg->error = __('Cannot save image metadata.');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   483
		return $msg;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   484
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   485
0d28b7c10758 First commit
ymh
parents:
diff changeset
   486
	if ( !$restored )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   487
		$msg->error = __('Image metadata is inconsistent.');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   488
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   489
		$msg->msg = __('Image restored successfully.');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   490
0d28b7c10758 First commit
ymh
parents:
diff changeset
   491
	return $msg;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   492
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   493
0d28b7c10758 First commit
ymh
parents:
diff changeset
   494
function wp_save_image($post_id) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   495
	$return = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   496
	$success = $delete = $scaled = $nocrop = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   497
	$post = get_post($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   498
	@ini_set('memory_limit', '256M');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   499
	$img = load_image_to_edit($post_id, $post->post_mime_type);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   500
0d28b7c10758 First commit
ymh
parents:
diff changeset
   501
	if ( !is_resource($img) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   502
		$return->error = esc_js( __('Unable to create new image.') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   503
		return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   504
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   505
0d28b7c10758 First commit
ymh
parents:
diff changeset
   506
	$fwidth = !empty($_REQUEST['fwidth']) ? intval($_REQUEST['fwidth']) : 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   507
	$fheight = !empty($_REQUEST['fheight']) ? intval($_REQUEST['fheight']) : 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   508
	$target = !empty($_REQUEST['target']) ? preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['target']) : '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   509
	$scale = !empty($_REQUEST['do']) && 'scale' == $_REQUEST['do'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   510
0d28b7c10758 First commit
ymh
parents:
diff changeset
   511
	if ( $scale && $fwidth > 0 && $fheight > 0 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   512
		$sX = imagesx($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   513
		$sY = imagesy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   514
0d28b7c10758 First commit
ymh
parents:
diff changeset
   515
		// check if it has roughly the same w / h ratio
0d28b7c10758 First commit
ymh
parents:
diff changeset
   516
		$diff = round($sX / $sY, 2) - round($fwidth / $fheight, 2);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   517
		if ( -0.1 < $diff && $diff < 0.1 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   518
			// scale the full size image
0d28b7c10758 First commit
ymh
parents:
diff changeset
   519
			$dst = wp_imagecreatetruecolor($fwidth, $fheight);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   520
			if ( imagecopyresampled( $dst, $img, 0, 0, 0, 0, $fwidth, $fheight, $sX, $sY ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   521
				imagedestroy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   522
				$img = $dst;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   523
				$scaled = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   524
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   525
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   526
0d28b7c10758 First commit
ymh
parents:
diff changeset
   527
		if ( !$scaled ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   528
			$return->error = esc_js( __('Error while saving the scaled image. Please reload the page and try again.') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   529
			return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   530
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   531
	} elseif ( !empty($_REQUEST['history']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   532
		$changes = json_decode( stripslashes($_REQUEST['history']) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   533
		if ( $changes )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   534
			$img = image_edit_apply_changes($img, $changes);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   535
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   536
		$return->error = esc_js( __('Nothing to save, the image has not changed.') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   537
		return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   538
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   539
0d28b7c10758 First commit
ymh
parents:
diff changeset
   540
	$meta = wp_get_attachment_metadata($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   541
	$backup_sizes = get_post_meta( $post->ID, '_wp_attachment_backup_sizes', true );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   542
0d28b7c10758 First commit
ymh
parents:
diff changeset
   543
	if ( !is_array($meta) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   544
		$return->error = esc_js( __('Image data does not exist. Please re-upload the image.') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   545
		return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   546
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   547
0d28b7c10758 First commit
ymh
parents:
diff changeset
   548
	if ( !is_array($backup_sizes) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   549
		$backup_sizes = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   550
0d28b7c10758 First commit
ymh
parents:
diff changeset
   551
	// generate new filename
0d28b7c10758 First commit
ymh
parents:
diff changeset
   552
	$path = get_attached_file($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   553
	$path_parts = pathinfo52( $path );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   554
	$filename = $path_parts['filename'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   555
	$suffix = time() . rand(100, 999);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   556
0d28b7c10758 First commit
ymh
parents:
diff changeset
   557
	if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE &&
0d28b7c10758 First commit
ymh
parents:
diff changeset
   558
		isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   559
0d28b7c10758 First commit
ymh
parents:
diff changeset
   560
		if ( 'thumbnail' == $target )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   561
			$new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   562
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   563
			$new_path = $path;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   564
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   565
		while( true ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   566
			$filename = preg_replace( '/-e([0-9]+)$/', '', $filename );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   567
			$filename .= "-e{$suffix}";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   568
			$new_filename = "{$filename}.{$path_parts['extension']}";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   569
			$new_path = "{$path_parts['dirname']}/$new_filename";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   570
			if ( file_exists($new_path) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   571
				$suffix++;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   572
			else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   573
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   574
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   575
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   576
0d28b7c10758 First commit
ymh
parents:
diff changeset
   577
	// save the full-size file, also needed to create sub-sizes
0d28b7c10758 First commit
ymh
parents:
diff changeset
   578
	if ( !wp_save_image_file($new_path, $img, $post->post_mime_type, $post_id) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   579
		$return->error = esc_js( __('Unable to save the image.') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   580
		return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   581
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   582
0d28b7c10758 First commit
ymh
parents:
diff changeset
   583
	if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   584
		$tag = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   585
		if ( isset($backup_sizes['full-orig']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   586
			if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   587
				$tag = "full-$suffix";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   588
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   589
			$tag = 'full-orig';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   590
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   591
0d28b7c10758 First commit
ymh
parents:
diff changeset
   592
		if ( $tag )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   593
			$backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $path_parts['basename']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   594
0d28b7c10758 First commit
ymh
parents:
diff changeset
   595
		$success = update_attached_file($post_id, $new_path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   596
0d28b7c10758 First commit
ymh
parents:
diff changeset
   597
		$meta['file'] = _wp_relative_upload_path($new_path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   598
		$meta['width'] = imagesx($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   599
		$meta['height'] = imagesy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   600
0d28b7c10758 First commit
ymh
parents:
diff changeset
   601
		list ( $uwidth, $uheight ) = wp_shrink_dimensions($meta['width'], $meta['height']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   602
		$meta['hwstring_small'] = "height='$uheight' width='$uwidth'";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   603
0d28b7c10758 First commit
ymh
parents:
diff changeset
   604
		if ( $success && ('nothumb' == $target || 'all' == $target) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   605
			$sizes = apply_filters( 'intermediate_image_sizes', array('large', 'medium', 'thumbnail') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   606
			if ( 'nothumb' == $target )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   607
				$sizes = array_diff( $sizes, array('thumbnail') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   608
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   609
0d28b7c10758 First commit
ymh
parents:
diff changeset
   610
		$return->fw = $meta['width'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   611
		$return->fh = $meta['height'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   612
	} elseif ( 'thumbnail' == $target ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   613
		$sizes = array( 'thumbnail' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   614
		$success = $delete = $nocrop = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   615
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   616
0d28b7c10758 First commit
ymh
parents:
diff changeset
   617
	if ( isset($sizes) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   618
		foreach ( $sizes as $size ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   619
			$tag = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   620
			if ( isset($meta['sizes'][$size]) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   621
				if ( isset($backup_sizes["$size-orig"]) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   622
					if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes["$size-orig"]['file'] != $meta['sizes'][$size]['file'] )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   623
						$tag = "$size-$suffix";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   624
				} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   625
					$tag = "$size-orig";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   626
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   627
0d28b7c10758 First commit
ymh
parents:
diff changeset
   628
				if ( $tag )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   629
					$backup_sizes[$tag] = $meta['sizes'][$size];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   630
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   631
0d28b7c10758 First commit
ymh
parents:
diff changeset
   632
			$crop = $nocrop ? false : get_option("{$size}_crop");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   633
			$resized = image_make_intermediate_size($new_path, get_option("{$size}_size_w"), get_option("{$size}_size_h"), $crop );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   634
0d28b7c10758 First commit
ymh
parents:
diff changeset
   635
			if ( $resized )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   636
				$meta['sizes'][$size] = $resized;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   637
			else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   638
				unset($meta['sizes'][$size]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   639
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   640
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   641
0d28b7c10758 First commit
ymh
parents:
diff changeset
   642
	if ( $success ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   643
		wp_update_attachment_metadata($post_id, $meta);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   644
		update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   645
0d28b7c10758 First commit
ymh
parents:
diff changeset
   646
		if ( $target == 'thumbnail' || $target == 'all' || $target == 'full' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   647
			$file_url = wp_get_attachment_url($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   648
			if ( $thumb = $meta['sizes']['thumbnail'] )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   649
				$return->thumbnail = path_join( dirname($file_url), $thumb['file'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   650
			else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   651
				$return->thumbnail = "$file_url?w=128&h=128";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   652
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   653
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   654
		$delete = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   655
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   656
0d28b7c10758 First commit
ymh
parents:
diff changeset
   657
	if ( $delete ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   658
		$delpath = apply_filters('wp_delete_file', $new_path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   659
		@unlink($delpath);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   660
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   661
0d28b7c10758 First commit
ymh
parents:
diff changeset
   662
	imagedestroy($img);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   663
0d28b7c10758 First commit
ymh
parents:
diff changeset
   664
	$return->msg = esc_js( __('Image saved') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   665
	return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   666
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   667