Advertisements

image_edit_apply_changes

Definition:
function image_edit_apply_changes($img, $changes) {}

Parameters

  • $img
  • $changes

Defined filters

  • image_edit_before_change
    apply_filters('image_edit_before_change', $img, $changes)

Source code

function image_edit_apply_changes($img, $changes) {



	if ( !is_array($changes) )

		return $img;



	// expand change operations

	foreach ( $changes as $key => $obj ) {

		if ( isset($obj->r) ) {

			$obj->type = 'rotate';

			$obj->angle = $obj->r;

			unset($obj->r);

		} elseif ( isset($obj->f) ) {

			$obj->type = 'flip';

			$obj->axis = $obj->f;

			unset($obj->f);

		} elseif ( isset($obj->c) ) {

			$obj->type = 'crop';

			$obj->sel = $obj->c;

			unset($obj->c);

		}

		$changes[$key] = $obj;

	}



	// combine operations

	if ( count($changes) > 1 ) {

		$filtered = array($changes[0]);

		for ( $i = 0, $j = 1; $j < count($changes); $j++ ) {

			$combined = false;

			if ( $filtered[$i]->type == $changes[$j]->type ) {

				switch ( $filtered[$i]->type ) {

					case 'rotate':

						$filtered[$i]->angle += $changes[$j]->angle;

						$combined = true;

						break;

					case 'flip':

						$filtered[$i]->axis ^= $changes[$j]->axis;

						$combined = true;

						break;

				}

			}

			if ( !$combined )

				$filtered[++$i] = $changes[$j];

		}

		$changes = $filtered;

		unset($filtered);

	}



	// image resource before applying the changes

	$img = apply_filters('image_edit_before_change', $img, $changes);



	foreach ( $changes as $operation ) {

		switch ( $operation->type ) {

			case 'rotate':

				if ( $operation->angle != 0 )

					$img = _rotate_image_resource($img, $operation->angle);

				break;

			case 'flip':

				if ( $operation->axis != 0 )

					$img = _flip_image_resource($img, ($operation->axis & 1) != 0, ($operation->axis & 2) != 0);

				break;

			case 'crop':

				$sel = $operation->sel;

				$scale = 1 / _image_get_preview_ratio( imagesx($img), imagesy($img) ); // discard preview scaling

				$img = _crop_image_resource($img, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale);

				break;

		}

	}



	return $img;

}

1987

Advertisements

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: