Example #1
0
 /**
  * Hydrate and render an image variation with parent data.
  *
  * You can use this to create a variation with a source image
  *
  * @param Image          $parent
  * @param ImageVariation $variation
  *
  * @return ImageVariation
  *
  * @throws BadImageException
  * @throws ImageManagerException
  */
 protected function hydrateVariation(Image $parent, ImageVariation &$variation)
 {
     if (!$parent->isHydrated()) {
         throw new ImageManagerException('Parent: ' . self::ERR_NOT_HYDRATED);
     }
     $quality = $variation->getQuality() ?: 90;
     if ($quality < 1) {
         $quality = 1;
     } elseif ($quality > 100) {
         $quality = 100;
     }
     $variation->setData(null);
     $input = $parent->getData();
     foreach ($this->encoders as $encoder) {
         if ($encoder->supports($input)) {
             $encoder->setData($input);
             $variation->setData($encoder->createVariation($variation->getFormat(), $quality, $variation->getDimensions(), $variation->getCropDimensions()));
             $encoder->setData(null);
             break;
         }
     }
     if (!$variation->getData()) {
         throw new NoSupportedEncoderException('There is no known encoder for this data type');
     }
     return $variation;
 }
 /**
  * @medium
  */
 public function testVariationLocalCreate()
 {
     $fn = __DIR__ . '/../Resources/image.png';
     $im = new ImageManager(new Filesystem(new LocalAdapter(static::$tmp_dir . 'remote')));
     $source = $im->loadFromFile($fn, self::TEST_KEY);
     // Create and render the variation
     $var = $im->createVariation($source, ImageFormat::JPEG(), 50);
     $this->assertFalse($var->isPersistent());
     $this->assertTrue($var->isHydrated());
     // Test the local save
     $im->save($var, self::$tmp_dir . 'local/variation.jpg');
     $this->assertFalse($var->isPersistent());
     $im->push($var);
     $this->assertTrue($var->isPersistent());
     // Test the pull
     $var_pull = new ImageVariation(self::TEST_KEY, ImageFormat::JPEG(), 50);
     $this->assertFalse($var_pull->isPersistent());
     $this->assertFalse($var_pull->isHydrated());
     $im->pull($var_pull);
     $this->assertTrue($var_pull->isPersistent());
     $this->assertTrue($var_pull->isHydrated());
     $im->save($var_pull, self::$tmp_dir . 'local/variation_pulled.jpg');
     // Test an auto-pull
     $var_autopull = new ImageVariation(self::TEST_KEY, ImageFormat::JPEG(), 50);
     $this->assertFalse($var_autopull->isPersistent());
     $this->assertFalse($var_autopull->isHydrated());
     $im->save($var_autopull, self::$tmp_dir . 'local/variation_autopulled.jpg');
     // Image data should be identical - no loss
     $md5_a = md5_file(self::$tmp_dir . 'local/variation.jpg');
     $md5_b = md5_file(self::$tmp_dir . 'local/variation_pulled.jpg');
     $md5_c = md5_file(self::$tmp_dir . 'local/variation_autopulled.jpg');
     $this->assertEquals($md5_a, $md5_b);
     $this->assertEquals($md5_a, $md5_c);
 }