コード例 #1
0
ファイル: PresetsTest.php プロジェクト: kartinki/kartinki
 /**
  * @depends testInstancesCreation
  */
 public function testPresetParser()
 {
     $presetParser = new PresetParser();
     $preset = $presetParser->parse('200x300');
     $this->assertInstanceOf('kartinki\\Kartinki\\Preset', $preset);
     $this->assertEquals(200, $preset->getWidth());
     $this->assertEquals(300, $preset->getHeight());
     $this->assertEquals(false, $preset->isFit());
     $preset = $presetParser->parse('0x1920:fit');
     $this->assertInstanceOf('kartinki\\Kartinki\\Preset', $preset);
     $this->assertEquals(0, $preset->getWidth());
     $this->assertEquals(1920, $preset->getHeight());
     $this->assertEquals(true, $preset->isFit());
     $preset = $presetParser->parse('200x0,quality=60');
     $this->assertInstanceOf('kartinki\\Kartinki\\Preset', $preset);
     $this->assertEquals(200, $preset->getWidth());
     $this->assertEquals(0, $preset->getHeight());
     $this->assertEquals(false, $preset->isFit());
     $this->assertEquals(60, $preset->getQuality());
     $preset = $presetParser->parse('300x250:fit,quality=99');
     $this->assertInstanceOf('kartinki\\Kartinki\\Preset', $preset);
     $this->assertEquals(300, $preset->getWidth());
     $this->assertEquals(250, $preset->getHeight());
     $this->assertEquals(true, $preset->isFit());
     $this->assertEquals(99, $preset->getQuality());
     $preset = $presetParser->parse('300x250,quality=10,quality=20');
     $this->assertInstanceOf('kartinki\\Kartinki\\Preset', $preset);
     $this->assertEquals(300, $preset->getWidth());
     $this->assertEquals(250, $preset->getHeight());
     $this->assertEquals(false, $preset->isFit());
     $this->assertEquals(20, $preset->getQuality());
     $preset = null;
     try {
         $preset = $presetParser->parse('');
     } catch (\Exception $e) {
         $this->assertInstanceOf('kartinki\\Kartinki\\Exceptions\\InvalidPresetException', $e);
     }
     $this->assertEquals(null, $preset);
     try {
         $preset = $presetParser->parse('wrong');
     } catch (\Exception $e) {
         $this->assertInstanceOf('kartinki\\Kartinki\\Exceptions\\InvalidPresetException', $e);
     }
     $this->assertEquals(null, $preset);
     try {
         $preset = $presetParser->parse('200x300:fit,rotate');
     } catch (\Exception $e) {
         $this->assertInstanceOf('kartinki\\Kartinki\\Exceptions\\InvalidPresetException', $e);
     }
     $this->assertEquals(null, $preset);
     try {
         $preset = $presetParser->parse('200x300:fit,quality');
     } catch (\Exception $e) {
         $this->assertInstanceOf('kartinki\\Kartinki\\Exceptions\\InvalidPresetException', $e);
     }
     $this->assertEquals(null, $preset);
 }
コード例 #2
0
ファイル: Thumbnailer.php プロジェクト: kartinki/kartinki
 /**
  * @param string $imagePath
  * @param string[]|PresetInterface[] $presets
  * @param string $outputDir
  * @param string $imageUniqueId
  *
  * @return Result
  */
 public function createThumbnails($imagePath, $presets, $outputDir = null, $imageUniqueId = null)
 {
     if (!file_exists($imagePath)) {
         throw new FileNotFoundException("File '{$imagePath}' not exists.");
     }
     if (!is_readable($imagePath)) {
         throw new FileIsNotReadableException("File '{$imagePath}' is not readable.");
     }
     if (is_null($outputDir)) {
         $outputDir = $this->outputDir ? $this->outputDir : realpath(dirname($imagePath));
     }
     if (!is_writable($outputDir)) {
         throw new DirectoryIsNotWritableException("Ouput directory '{$outputDir}' is not writable.");
     }
     if (is_null($imageUniqueId)) {
         $imageUniqueId = $this->getUniqueName($imagePath);
     } elseif (!is_string($imageUniqueId) && !(is_object($imageUniqueId) && method_exists($imageUniqueId, '__toString'))) {
         throw new InvalidArgumentException("{$imageUniqueId} must be a string.");
     }
     $thumbnails = [];
     $imageExtension = pathinfo($imagePath, PATHINFO_EXTENSION);
     foreach ($presets as $presetName => $preset) {
         if (is_string($preset)) {
             $parsedPreset = $this->presetParser->parse($preset);
         } elseif ($preset instanceof PresetInterface) {
             $parsedPreset = $preset;
         } else {
             throw new InvalidArgumentException('Preset must be a string or implements kartinki\\Kartinki\\Interfaces\\PresetInterface.');
         }
         $thumbnailFilename = $imageUniqueId . self::NAME_SEPARATOR . $presetName . '.' . $imageExtension;
         $image = $this->processor->read(fopen($imagePath, 'r'));
         $thumbnail = $this->createImageThumbnail($image, $parsedPreset);
         $thumbnail->save($outputDir . '/' . $thumbnailFilename, ['jpeg_quality' => $parsedPreset->getQuality()]);
         unset($thumbnail);
         $thumbnails[$presetName] = $thumbnailFilename;
     }
     $result = new Result($imageUniqueId, $imageExtension, $thumbnails);
     return $result;
 }