Announcement

  •  » Engine
  •  » tempory derivative without watermark

#1 2015-11-19 09:55:24

plg
Piwigo Team
Nantes, France, Europe
2002-04-05
13791

tempory derivative without watermark

Hi,

I would like to be able to get a derivative (L size, for instance) without watermark, even if a watermark is set. It can be temporary and not go in the cache. I suppose I could:

1) deactivate the watermark
2) ask for L size
3) reactivate the watermark

The problem is that it would have impact on all photos. I just need a single photo without watermark.

How would you do that? (I mean the code)

Offline

 

#2 2015-11-19 10:15:16

rvelices
Former Piwigo Team
2005-12-29
1960

Re: tempory derivative without watermark

Hello, I think your solution has too many drawbacks. Ccopying the relevant code from i.php into your plugin should suffice - that's maximum 30-40 lines ( the rest is init phase, url parsing, watermarking etc ...)

Offline

 

#3 2015-11-19 10:46:01

plg
Piwigo Team
Nantes, France, Europe
2002-04-05
13791

Re: tempory derivative without watermark

OK, thank you rvelices. I'm going to try it that way. Duplicating i.php is not really a problem (I did such kind of thing when copying action.php for [extension by plg] Download by Size)

Offline

 

#4 2015-11-19 22:09:51

plg
Piwigo Team
Nantes, France, Europe
2002-04-05
13791

Re: tempory derivative without watermark

OK, here comes the code I implemented:

Code:

foreach (ImageStdParams::get_all_type_map() as $type => $params)
{
  if ($type == $_GET['size'])
  {
    $page['derivative_type'] = $type;
    $page['derivative_params'] = $params;
    break;
  }
}

if (!isset($page['derivative_type']))
{
  die('Hacking attempt: unknown size');
}

$file = ppcredits_generate_temporary_derivative(
  $element_info,
  $page['derivative_type'],
  $page['derivative_params']
  );

$page['delete_temporary_derivative'] = true;
// [...]

if (isset($page['delete_temporary_derivative']) and $page['delete_temporary_derivative'])
{
  unlink($file);
}

/**
 * compared to i.php, this function does not apply the watermark (and only
 * keep code relevant for ppcredits plugin)
 */
function ppcredits_generate_temporary_derivative($element_info, $type, $params)
{
  global $conf;
  
  $src_path = PHPWG_ROOT_PATH.$element_info['path'];
  $derivative_filename = $element_info['id'].'-'.$type.'-'.generate_key(20).'.'.get_extension($element_info['path']);
  $derivative_path = PHPWG_ROOT_PATH.$conf['data_location'].'prepaid_credits/'.$derivative_filename;

  include_once(PHPWG_ROOT_PATH.'admin/include/image.class.php');

  if (!isset($element_info['rotation']))
  {
    $rotation_angle = pwg_image::get_rotation_angle($src_path);
  }
  else
  {
    $rotation_angle = pwg_image::get_rotation_angle_from_code($element_info['rotation']);
  }

  if (!mkgetdir(dirname($derivative_path)))
  {
    die("dir create error");
  }

  ignore_user_abort(true);
  @set_time_limit(0);

  $image = new pwg_image($src_path);

  // rotate
  if (0 != $rotation_angle)
  {
    $image->rotate($rotation_angle);
  }

  // Crop & scale
  $o_size = $d_size = array($image->get_width(),$image->get_height());
  $params->sizing->compute($o_size, $element_info['coi'], $crop_rect, $scaled_size);
  if ($crop_rect)
  {
    $image->crop( $crop_rect->width(), $crop_rect->height(), $crop_rect->l, $crop_rect->t);
  }

  if ($scaled_size)
  {
    $image->resize( $scaled_size[0], $scaled_size[1] );
    $d_size = $scaled_size;
  }

  if ($params->sharpen)
  {
    $image->sharpen( $params->sharpen );
  }

  if ($d_size[0]*$d_size[1] < $conf['derivatives_strip_metadata_threshold'])
  {// strip metadata for small images
    $image->strip();
  }

  $image->set_compression_quality(ImageStdParams::$quality);
  $image->write($derivative_path);
  $image->destroy();

  return $derivative_path;
}

Thank you for the tip :-)

Offline

 
  •  » Engine
  •  » tempory derivative without watermark

Board footer

Powered by FluxBB

github twitter newsletter Donate Piwigo.org © 2002-2024 · Contact