protected function createTmb($vd6fe1d0be6347b8ef2427fa629c04485) { $vd02a169f33469c888396a24dd9d9f1c6 = $this->mimetype($vd6fe1d0be6347b8ef2427fa629c04485); if (!$this->canCreateTmb($vd6fe1d0be6347b8ef2427fa629c04485, $vd02a169f33469c888396a24dd9d9f1c6)) { return false; } $vb068931cc450442b63f5b3d276ea4297 = $this->tmbName($vd6fe1d0be6347b8ef2427fa629c04485); $va8b687c2e93191d90a6d7b8982ceec4a = $this->tmbPath . DIRECTORY_SEPARATOR . $vb068931cc450442b63f5b3d276ea4297; if (($v25d902c24283ab8cfbac54dfa101ad31 = $this->_fopen($vd6fe1d0be6347b8ef2427fa629c04485, 'rb')) == false || ($v90710761341352a9e144d8ad4c92598b = @fopen($va8b687c2e93191d90a6d7b8982ceec4a, 'wb')) == false) { return false; } while (!feof($v25d902c24283ab8cfbac54dfa101ad31)) { fwrite($v90710761341352a9e144d8ad4c92598b, fread($v25d902c24283ab8cfbac54dfa101ad31, 8192)); } $this->_fclose($v25d902c24283ab8cfbac54dfa101ad31, $vd6fe1d0be6347b8ef2427fa629c04485); fclose($v90710761341352a9e144d8ad4c92598b); if (($v03c7c0ace395d80182db07ae2c30f034 = @getimagesize($va8b687c2e93191d90a6d7b8982ceec4a)) == false) { return false; } $result = false; $v88029fd68f54ae31758f44d7b965868f = $this->tmbSize; list($v9dd4e461268c8034f5c8564e155c67a6, $v415290769594460e2e485922904f345d, $v84b16781293d33e80d74ef9d63280bc0, $v55fc30b57cc1b80e8f68104931fbf716) = $this->tmbEffects($v03c7c0ace395d80182db07ae2c30f034[0], $v03c7c0ace395d80182db07ae2c30f034[1], $v88029fd68f54ae31758f44d7b965868f, $this->options['tmbCrop']); switch ($this->imgLib) { case 'imagick': try { $vb798abe6e1b1318ee36b0dcb3fb9e4d3 = new imagick($va8b687c2e93191d90a6d7b8982ceec4a); } catch (Exception $ve1671797c52e15f763380b45e841ec32) { return false; } $vb798abe6e1b1318ee36b0dcb3fb9e4d3->contrastImage(1); if ($this->options['tmbCrop'] == false) { $va8a63b4d63a08aed720d0f5f249e07d9 = new Imagick(); $va8a63b4d63a08aed720d0f5f249e07d9->newImage($v88029fd68f54ae31758f44d7b965868f, $v88029fd68f54ae31758f44d7b965868f, new ImagickPixel($this->options['tmbBgColor'])); $va8a63b4d63a08aed720d0f5f249e07d9->setImageFormat('png'); $vb798abe6e1b1318ee36b0dcb3fb9e4d3->resizeImage($v84b16781293d33e80d74ef9d63280bc0, $v55fc30b57cc1b80e8f68104931fbf716, NULL, true); $va8a63b4d63a08aed720d0f5f249e07d9->compositeImage($vb798abe6e1b1318ee36b0dcb3fb9e4d3, imagick::COMPOSITE_OVER, $v9dd4e461268c8034f5c8564e155c67a6, $v415290769594460e2e485922904f345d); $result = $va8a63b4d63a08aed720d0f5f249e07d9->writeImage($va8b687c2e93191d90a6d7b8982ceec4a); } else { $result = $vb798abe6e1b1318ee36b0dcb3fb9e4d3->cropThumbnailImage($v88029fd68f54ae31758f44d7b965868f, $v88029fd68f54ae31758f44d7b965868f) && $vb798abe6e1b1318ee36b0dcb3fb9e4d3->writeImage($va8b687c2e93191d90a6d7b8982ceec4a); } break; case 'gd': if ($v03c7c0ace395d80182db07ae2c30f034['mime'] == 'image/jpeg') { $vb798abe6e1b1318ee36b0dcb3fb9e4d3 = imagecreatefromjpeg($va8b687c2e93191d90a6d7b8982ceec4a); } elseif ($v03c7c0ace395d80182db07ae2c30f034['mime'] == 'image/png') { $vb798abe6e1b1318ee36b0dcb3fb9e4d3 = imagecreatefrompng($va8b687c2e93191d90a6d7b8982ceec4a); } elseif ($v03c7c0ace395d80182db07ae2c30f034['mime'] == 'image/gif') { $vb798abe6e1b1318ee36b0dcb3fb9e4d3 = imagecreatefromgif($va8b687c2e93191d90a6d7b8982ceec4a); } elseif ($v03c7c0ace395d80182db07ae2c30f034['mime'] == 'image/xbm') { $vb798abe6e1b1318ee36b0dcb3fb9e4d3 = imagecreatefromxbm($va8b687c2e93191d90a6d7b8982ceec4a); } if (isset($vb798abe6e1b1318ee36b0dcb3fb9e4d3) && $vb798abe6e1b1318ee36b0dcb3fb9e4d3 && false != ($vfa816edb83e95bf0c8da580bdfd491ef = imagecreatetruecolor($v88029fd68f54ae31758f44d7b965868f, $v88029fd68f54ae31758f44d7b965868f))) { if ($this->options['tmbCrop'] == false) { if ($this->options['tmbBgColor'] == 'transparent') { list($v4b43b0aee35624cd95b910189b3dc231, $vb2f5ff47436671b6e533d8dc3614845d, $v92eb5ffee6ae2fec3ad71c777531578f) = array(0, 0, 255); } else { list($v4b43b0aee35624cd95b910189b3dc231, $vb2f5ff47436671b6e533d8dc3614845d, $v92eb5ffee6ae2fec3ad71c777531578f) = sscanf($this->options['tmbBgColor'], "#%02x%02x%02x"); } $ve12224dadfacf7a79886df59f202a403 = imagecolorallocate($vfa816edb83e95bf0c8da580bdfd491ef, $v4b43b0aee35624cd95b910189b3dc231, $vb2f5ff47436671b6e533d8dc3614845d, $v92eb5ffee6ae2fec3ad71c777531578f); if ($this->options['tmbBgColor'] == 'transparent') { $ve12224dadfacf7a79886df59f202a403 = imagecolortransparent($vfa816edb83e95bf0c8da580bdfd491ef, $ve12224dadfacf7a79886df59f202a403); } imagefill($vfa816edb83e95bf0c8da580bdfd491ef, 0, 0, $ve12224dadfacf7a79886df59f202a403); if (!imagecopyresampled($vfa816edb83e95bf0c8da580bdfd491ef, $vb798abe6e1b1318ee36b0dcb3fb9e4d3, $v9dd4e461268c8034f5c8564e155c67a6, $v415290769594460e2e485922904f345d, 0, 0, $v84b16781293d33e80d74ef9d63280bc0, $v55fc30b57cc1b80e8f68104931fbf716, $v03c7c0ace395d80182db07ae2c30f034[0], $v03c7c0ace395d80182db07ae2c30f034[1])) { return false; } } else { if (!imagecopyresampled($vfa816edb83e95bf0c8da580bdfd491ef, $vb798abe6e1b1318ee36b0dcb3fb9e4d3, 0, 0, $v9dd4e461268c8034f5c8564e155c67a6, $v415290769594460e2e485922904f345d, $v88029fd68f54ae31758f44d7b965868f, $v88029fd68f54ae31758f44d7b965868f, $v84b16781293d33e80d74ef9d63280bc0, $v55fc30b57cc1b80e8f68104931fbf716)) { return false; } } $result = imagepng($vfa816edb83e95bf0c8da580bdfd491ef, $va8b687c2e93191d90a6d7b8982ceec4a, 7); imagedestroy($vb798abe6e1b1318ee36b0dcb3fb9e4d3); imagedestroy($vfa816edb83e95bf0c8da580bdfd491ef); } break; } return $result ? $vb068931cc450442b63f5b3d276ea4297 : false; }
/** * Create image thumbnail * * @param string $img image file * @param string $tmb thumbnail name * @return bool **/ protected function _tmb($img, $tmb) { if (false == ($s = getimagesize($img))) { return false; } $tmbSize = $this->_options['tmbSize']; if ($this->_options['tmbCrop'] == false) { /* Calculating image scale width and height */ $xscale = $s[0] / $tmbSize; $yscale = $s[1] / $tmbSize; if ($yscale > $xscale) { $newwidth = round($s[0] * (1 / $yscale)); $newheight = round($s[1] * (1 / $yscale)); } else { $newwidth = round($s[0] * (1 / $xscale)); $newheight = round($s[1] * (1 / $xscale)); } /* Keeping original dimensions if image fitting into thumbnail without scale */ if ($s[0] <= $tmbSize && $s[1] <= $tmbSize) { $newwidth = $s[0]; $newheight = $s[1]; } /* Calculating coordinates for aligning thumbnail */ $align_y = ceil(($tmbSize - $newheight) / 2); $align_x = ceil(($tmbSize - $newwidth) / 2); } switch ($this->_options['imgLib']) { case 'imagick': try { $_img = new imagick($img); } catch (Exception $e) { return false; } $_img->contrastImage(1); if ($this->_options['tmbCrop'] == false) { $img1 = new Imagick(); $img1->newImage($tmbSize, $tmbSize, new ImagickPixel($this->_options['tmbBgColor'])); $img1->setImageFormat('png'); $_img->resizeImage($newwidth, $newheight, NULL, true); $img1->compositeImage($_img, imagick::COMPOSITE_OVER, $align_x, $align_y); return $img1->writeImage($tmb); } else { return $_img->cropThumbnailImage($tmbSize, $tmbSize) && $_img->writeImage($tmb); } break; case 'mogrify': if (@copy($img, $tmb)) { list($x, $y, $size) = $this->_cropPos($s[0], $s[1]); // exec('mogrify -crop '.$size.'x'.$size.'+'.$x.'+'.$y.' -scale '.$tmbSize.'x'.$tmbSize.'! '.escapeshellarg($tmb), $o, $c); $mogrifyArgs = 'mogrify -resize ' . $tmbSize . 'x' . $tmbSize; if ($this->_options['tmbCrop'] == false) { $mogrifyArgs .= ' -gravity center -background "' . $this->_options['tmbBgColor'] . '" -extent ' . $tmbSize . 'x' . $tmbSize; } if ($this->_options['tmbCrop'] == false) { $mogrifyArgs .= ' ' . escapeshellarg($tmb); } exec($mogrifyArgs, $o, $c); if (file_exists($tmb)) { return true; } elseif ($c == 0) { // find tmb for psd and animated gif $mime = $this->_mimetype($img); if ($mime == 'image/vnd.adobe.photoshop' || ($mime = 'image/gif')) { $pinfo = pathinfo($tmb); $test = $pinfo['dirname'] . DIRECTORY_SEPARATOR . $pinfo['filename'] . '-0.' . $pinfo['extension']; if (file_exists($test)) { return rename($test, $tmb); } } } } break; case 'gd': if ($s['mime'] == 'image/jpeg') { $_img = imagecreatefromjpeg($img); } elseif ($s['mime'] == 'image/png') { $_img = imagecreatefrompng($img); } elseif ($s['mime'] == 'image/gif') { $_img = imagecreatefromgif($img); } if (!$_img || false == ($_tmb = imagecreatetruecolor($tmbSize, $tmbSize))) { return false; } if ($this->_options['tmbCrop'] == false) { list($r, $g, $b) = sscanf($this->_options['tmbBgColor'], "#%02x%02x%02x"); imagefill($_tmb, 0, 0, imagecolorallocate($_tmb, $r, $g, $b)); if (!imagecopyresampled($_tmb, $_img, $align_x, $align_y, 0, 0, $newwidth, $newheight, $s[0], $s[1])) { return false; } } else { list($x, $y, $size) = $this->_cropPos($s[0], $s[1]); if (!imagecopyresampled($_tmb, $_img, 0, 0, $x, $y, $tmbSize, $tmbSize, $size, $size)) { return false; } } $r = imagepng($_tmb, $tmb, 7); imagedestroy($_img); imagedestroy($_tmb); return $r; break; } }
/** * Create image thumbnail * * @param string $img image file * @param string $tmb thumbnail name * @return bool **/ private function _tmb($img, $tmb) { if (false == ($s = getimagesize($img))) { return false; } $tmbSize = $this->_options['tmbSize']; switch ($this->_options['imgLib']) { case 'imagick': try { $_img = new imagick($img); } catch (Exception $e) { return false; } $_img->contrastImage(1); return $_img->cropThumbnailImage($tmbSize, $tmbSize) && $_img->writeImage($tmb); break; case 'mogrify': if (@copy($img, $tmb)) { list($x, $y, $size) = $this->_cropPos($s[0], $s[1]); // exec('mogrify -crop '.$size.'x'.$size.'+'.$x.'+'.$y.' -scale '.$tmbSize.'x'.$tmbSize.'! '.escapeshellarg($tmb), $o, $c); exec('mogrify -resize ' . $tmbSize . 'x' . $tmbSize . '^ -gravity center -extent ' . $tmbSize . 'x' . $tmbSize . ' ' . escapeshellarg($tmb), $o, $c); if (file_exists($tmb)) { return true; } elseif ($c == 0) { // find tmb for psd and animated gif $mime = $this->_mimetype($img); if ($mime == 'image/vnd.adobe.photoshop' || ($mime = 'image/gif')) { $pinfo = pathinfo($tmb); $test = $pinfo['dirname'] . DIRECTORY_SEPARATOR . $pinfo['filename'] . '-0.' . $pinfo['extension']; if (file_exists($test)) { return rename($test, $tmb); } } } } break; case 'gd': if ($s['mime'] == 'image/jpeg') { $_img = imagecreatefromjpeg($img); } elseif ($s['mime'] == 'image/png') { $_img = imagecreatefrompng($img); } elseif ($s['mime'] == 'image/gif') { $_img = imagecreatefromgif($img); } if (!$_img || false == ($_tmb = imagecreatetruecolor($tmbSize, $tmbSize))) { return false; } list($x, $y, $size) = $this->_cropPos($s[0], $s[1]); if (!imagecopyresampled($_tmb, $_img, 0, 0, $x, $y, $tmbSize, $tmbSize, $size, $size)) { return false; } $r = imagepng($_tmb, $tmb, 7); imagedestroy($_img); imagedestroy($_tmb); return $r; break; } }
/** * Create thumnbnail and return it's URL on success * * @param string $path file path * @param string $mime file mime type * @return string|false * @author Dmitry (dio) Levashov **/ protected function createTmb($path) { $mime = $this->mimetype($path); if (!$this->canCreateTmb($path, $mime)) { return false; } $name = $this->tmbName($path); $tmb = $this->tmbPath . DIRECTORY_SEPARATOR . $name; // copy image in tmbPath so some drivers does not store files on local fs if (($src = $this->_fopen($path, 'rb')) == false || ($trg = @fopen($tmb, 'wb')) == false) { return false; } while (!feof($src)) { fwrite($trg, fread($src, 8192)); } $this->_fclose($src, $path); fclose($trg); if (($s = @getimagesize($tmb)) == false) { return false; } $result = false; $tmbSize = $this->tmbSize; list($x, $y, $size_w, $size_h) = $this->tmbEffects($s[0], $s[1], $tmbSize, $this->options['tmbCrop']); switch ($this->imgLib) { case 'imagick': try { $img = new imagick($tmb); } catch (Exception $e) { return false; } $img->contrastImage(1); if ($this->options['tmbCrop'] == false) { $img1 = new Imagick(); $img1->newImage($tmbSize, $tmbSize, new ImagickPixel($this->options['tmbBgColor'])); $img1->setImageFormat('png'); $img->resizeImage($size_w, $size_h, NULL, true); $img1->compositeImage($img, imagick::COMPOSITE_OVER, $x, $y); $result = $img1->writeImage($tmb); } else { $result = $img->cropThumbnailImage($tmbSize, $tmbSize) && $img->writeImage($tmb); } break; case 'gd': if ($s['mime'] == 'image/jpeg') { $img = imagecreatefromjpeg($tmb); } elseif ($s['mime'] == 'image/png') { $img = imagecreatefrompng($tmb); } elseif ($s['mime'] == 'image/gif') { $img = imagecreatefromgif($tmb); } elseif ($s['mime'] == 'image/xbm') { $img = imagecreatefromxbm($tmb); } if ($img && false != ($tmp = imagecreatetruecolor($tmbSize, $tmbSize))) { if ($this->options['tmbCrop'] == false) { if ($this->options['tmbBgColor'] == 'transparent') { list($r, $g, $b) = array(0, 0, 255); } else { list($r, $g, $b) = sscanf($this->options['tmbBgColor'], "#%02x%02x%02x"); } $bgcolor = imagecolorallocate($tmp, $r, $g, $b); if ($this->options['tmbBgColor'] == 'transparent') { $bgcolor = imagecolortransparent($tmp, $bgcolor); } imagefill($tmp, 0, 0, $bgcolor); if (!imagecopyresampled($tmp, $img, $x, $y, 0, 0, $size_w, $size_h, $s[0], $s[1])) { return false; } } else { if (!imagecopyresampled($tmp, $img, 0, 0, $x, $y, $tmbSize, $tmbSize, $size_w, $size_h)) { return false; } } $result = imagepng($tmp, $tmb, 7); imagedestroy($img); imagedestroy($tmp); } break; } return $result ? $name : false; }
/** * Resize image * * @param string $path image file * @param int $width new width * @param int $height new height * @param bool $crop crop image * @param bool $exactfit fit into given dimensions exactly * @param string $imgLib image library * @param string $bgcolor image background color * @param string $destformat image destination format * @return string|false * @author Dmitry (dio) Levashov, Alexey Sukhotin **/ protected function resizeImg($path, $width, $height, $crop = false, $exactfit = false, $imgLib = 'imagick', $bgcolor = '#0000ff', $destformat = null) { if (($s = @getimagesize($path)) == false) { return false; } $result = false; list($x, $y, $size_w, $size_h) = $this->getResizeCropDimensions($s[0], $s[1], $width, $height, $crop, $exactfit); switch ($imgLib) { case 'imagick': try { $img = new imagick($path); } catch (Exception $e) { return false; } $img->contrastImage(1); if ($crop == false) { $img->resizeImage($size_w, $size_h, NULL, true); if ($exactfit == true) { $img1 = new Imagick(); $img1->newImage($width, $height, new ImagickPixel($bgcolor)); $img1->setImageFormat($destformat != null ? $destformat : $img->getFormat()); $img->resizeImage($size_w, $size_h, NULL, true); $img1->compositeImage($img, imagick::COMPOSITE_OVER, $x, $y); $result = $img1->writeImage($path); return $result ? $path : false; } } else { $img->cropImage($width, $height, $x, $y); } $result = $img->writeImage($path); return $result ? $path : false; break; case 'gd': if ($s['mime'] == 'image/jpeg') { $img = imagecreatefromjpeg($path); } elseif ($s['mime'] == 'image/png') { $img = imagecreatefrompng($path); } elseif ($s['mime'] == 'image/gif') { $img = imagecreatefromgif($path); } elseif ($s['mime'] == 'image/xbm') { $img = imagecreatefromxbm($path); } $init_w = $size_w; $init_h = $size_h; if ($exactfit == true) { $init_w = $width; $init_h = $height; } if ($img && false != ($tmp = imagecreatetruecolor($init_w, $init_h))) { if ($crop == false) { if ($bgcolor == 'transparent') { list($r, $g, $b) = array(0, 0, 255); } else { list($r, $g, $b) = sscanf($bgcolor, "#%02x%02x%02x"); } $bgcolor1 = imagecolorallocate($tmp, $r, $g, $b); if ($bgcolor == 'transparent') { $bgcolor1 = imagecolortransparent($tmp, $bgcolor1); } imagefill($tmp, 0, 0, $bgcolor1); if (!imagecopyresampled($tmp, $img, $x, $y, 0, 0, $size_w, $size_h, $s[0], $s[1])) { return false; } } else { if (!imagecopy($tmp, $img, 0, 0, $x, $y, $width, $height)) { return false; } } if ($destformat == 'jpg' || $destformat == null && $s['mime'] == 'image/jpeg') { $result = imagejpeg($tmp, $path, 100); } else { if ($destformat == 'gif' || $destformat == null && $s['mime'] == 'image/gif') { $result = imagegif($tmp, $path, 7); } else { $result = imagepng($tmp, $path, 7); } } imagedestroy($img); imagedestroy($tmp); return $result ? $path : false; } break; } return false; }