/** * @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); }
/** * @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; }