Changeset View
Changeset View
Standalone View
Standalone View
src/applications/files/PhabricatorImageTransformer.php
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | public function executeProfileTransform( | ||||
return PhabricatorFile::newFromFileData( | return PhabricatorFile::newFromFileData( | ||||
$image, | $image, | ||||
array( | array( | ||||
'name' => 'profile-'.$file->getName(), | 'name' => 'profile-'.$file->getName(), | ||||
'canCDN' => true, | 'canCDN' => true, | ||||
)); | )); | ||||
} | } | ||||
public function executePreviewTransform( | |||||
PhabricatorFile $file, | |||||
$size) { | |||||
$image = $this->generatePreview($file, $size); | |||||
return PhabricatorFile::newFromFileData( | |||||
$image, | |||||
array( | |||||
'name' => 'preview-'.$file->getName(), | |||||
'canCDN' => true, | |||||
)); | |||||
} | |||||
public function executeConpherenceTransform( | public function executeConpherenceTransform( | ||||
PhabricatorFile $file, | PhabricatorFile $file, | ||||
$top, | $top, | ||||
$left, | $left, | ||||
$width, | $width, | ||||
$height) { | $height) { | ||||
$image = $this->crasslyCropTo( | $image = $this->crasslyCropTo( | ||||
▲ Show 20 Lines • Show All 107 Lines • ▼ Show 20 Lines | imagecopyresampled( | ||||
0, 0, | 0, 0, | ||||
$sdx, $sdy, | $sdx, $sdy, | ||||
$x, $y); | $x, $y); | ||||
return $dst; | return $dst; | ||||
} | } | ||||
public static function getPreviewDimensions(PhabricatorFile $file, $size) { | |||||
$metadata = $file->getMetadata(); | |||||
$x = idx($metadata, PhabricatorFile::METADATA_IMAGE_WIDTH); | |||||
$y = idx($metadata, PhabricatorFile::METADATA_IMAGE_HEIGHT); | |||||
if (!$x || !$y) { | |||||
$data = $file->loadFileData(); | |||||
$src = imagecreatefromstring($data); | |||||
$x = imagesx($src); | |||||
$y = imagesy($src); | |||||
} | |||||
$scale = min($size / $x, $size / $y, 1); | |||||
$dx = max($size / 4, $scale * $x); | |||||
$dy = max($size / 4, $scale * $y); | |||||
$sdx = $scale * $x; | |||||
$sdy = $scale * $y; | |||||
return array( | |||||
'x' => $x, | |||||
'y' => $y, | |||||
'dx' => $dx, | |||||
'dy' => $dy, | |||||
'sdx' => $sdx, | |||||
'sdy' => $sdy, | |||||
); | |||||
} | |||||
public static function getScaleForCrop( | public static function getScaleForCrop( | ||||
PhabricatorFile $file, | PhabricatorFile $file, | ||||
$des_width, | $des_width, | ||||
$des_height) { | $des_height) { | ||||
$metadata = $file->getMetadata(); | $metadata = $file->getMetadata(); | ||||
$width = $metadata[PhabricatorFile::METADATA_IMAGE_WIDTH]; | $width = $metadata[PhabricatorFile::METADATA_IMAGE_WIDTH]; | ||||
$height = $metadata[PhabricatorFile::METADATA_IMAGE_HEIGHT]; | $height = $metadata[PhabricatorFile::METADATA_IMAGE_HEIGHT]; | ||||
if ($height < $des_height) { | if ($height < $des_height) { | ||||
$scale = $height / $des_height; | $scale = $height / $des_height; | ||||
} else if ($width < $des_width) { | } else if ($width < $des_width) { | ||||
$scale = $width / $des_width; | $scale = $width / $des_width; | ||||
} else { | } else { | ||||
$scale_x = $des_width / $width; | $scale_x = $des_width / $width; | ||||
$scale_y = $des_height / $height; | $scale_y = $des_height / $height; | ||||
$scale = max($scale_x, $scale_y); | $scale = max($scale_x, $scale_y); | ||||
} | } | ||||
return $scale; | return $scale; | ||||
} | } | ||||
private function generatePreview(PhabricatorFile $file, $size) { | |||||
$data = $file->loadFileData(); | |||||
$src = imagecreatefromstring($data); | |||||
$dimensions = self::getPreviewDimensions($file, $size); | |||||
$x = $dimensions['x']; | |||||
$y = $dimensions['y']; | |||||
$dx = $dimensions['dx']; | |||||
$dy = $dimensions['dy']; | |||||
$sdx = $dimensions['sdx']; | |||||
$sdy = $dimensions['sdy']; | |||||
$dst = $this->getBlankDestinationFile($dx, $dy); | |||||
imagecopyresampled( | |||||
$dst, | |||||
$src, | |||||
($dx - $sdx) / 2, ($dy - $sdy) / 2, | |||||
0, 0, | |||||
$sdx, $sdy, | |||||
$x, $y); | |||||
return self::saveImageDataInAnyFormat($dst, $file->getMimeType()); | |||||
} | |||||
private function applyMemeToFile( | private function applyMemeToFile( | ||||
PhabricatorFile $file, | PhabricatorFile $file, | ||||
$upper_text, | $upper_text, | ||||
$lower_text) { | $lower_text) { | ||||
$data = $file->loadFileData(); | $data = $file->loadFileData(); | ||||
$img_type = $file->getMimeType(); | $img_type = $file->getMimeType(); | ||||
$imagemagick = PhabricatorEnv::getEnvConfig('files.enable-imagemagick'); | $imagemagick = PhabricatorEnv::getEnvConfig('files.enable-imagemagick'); | ||||
▲ Show 20 Lines • Show All 385 Lines • Show Last 20 Lines |