dzenlife
4/16/2018 - 3:58 PM

Image Resize Crop Bitrix

<?
$arResult['DETAIL_PICTURE']['SRC'] = Image::resize($arResult['DETAIL_PICTURE'], 300, 300);

$file = CFile::GetByID($arItem['DETAIL_PICTURE']);
if ($file_props = $file->Fetch()) {
    $arItem['SRC'] = Image::crop($file_props, 80, 80);
}
<?
class Image {

    // Авторесайз пикч
    function autoResize($resource, $maxWidth = false, $maxHeight = false) {
        if ($maxWidth === false)
            $maxWidth = 1920;

        if ($maxHeight === false)
            $maxHeight = 1080;

        if (is_int($resource))
            $resource = CFile::GetFileArray($resource);

        // Это не изображение
        if (!is_array($resource))
            return false;

        // Шорткат
        $i = $resource;

        if (($i['HEIGHT'] > $i['WIDTH'] && $maxHeight < $maxWidth) || ($i['WIDTH'] > $i['HEIGHT'] && $maxWidth < $maxHeight)) {
            $_ = $maxHeight;
            $maxHeight = $maxWidth;
            $maxWidth = $_;
        }
        unset($_);

        $r = Array(
            'w' => $maxWidth > $i['WIDTH'] ? $i['WIDTH'] : $maxWidth,
            'h' => $maxHeight > $i['HEIGHT'] ? $i['HEIGHT'] : $maxHeight
        );

        $log = Array();
        if ($i['HEIGHT'] > $i['WIDTH']) {
            $log["if \$i['HEIGHT'] > \$i['WIDTH']"] = true;
            if ($i['WIDTH'] > $r['w']) {
                $diff = $i['WIDTH'] - $r['w'];
                $i['HEIGHT'] -= $diff;
                $i['WIDTH'] = $r['w'];
            }

            if ($i['HEIGHT'] > $r['h']) {
                $diff = $i['HEIGHT'] - $r['h'];
                $i['WIDTH'] -= $diff;
                $i['HEIGHT'] = $r['h'];
            }
        } else {
            if ($i['HEIGHT'] > $r['h']) {
                $diff = $i['HEIGHT'] - $r['h'];
                $i['WIDTH'] -= $diff;
                $i['HEIGHT'] = $r['h'];
            }

            if ($i['WIDTH'] > $r['w']) {
                $diff = $i['WIDTH'] - $r['w'];
                $i['HEIGHT'] -= $diff;
                $i['WIDTH'] = $r['w'];
            }
        }
//        Log::create([
//            'WIDTH' => $i['WIDTH'],
//            'HEIGHT' => $i['HEIGHT'],
//            'maxHeight' => $maxHeight,
//            'maxWidth' => $maxWidth,
//            'r' => $r,
//            'result' => $log
//        ]);
        return self::resize($resource, $i['WIDTH'], $i['HEIGHT']);
    }

// Шорткат ресайза картинок
    public function resize($sourceImage, $targetSizeWidth, $targetSizeHeight, $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL) {
        $result = CFile::ResizeImageGet(
                        $sourceImage, Array('width' => $targetSizeWidth, 'height' => $targetSizeHeight), $resizeType, true
        );
        $_res = $result['src'] ? $result['src'] : $sourceImage['SRC'];
        return $_res;
    }

// Шорткат для кропа
    public function crop($sourceImage, $targetSizeWidth, $targetSizeHeight) {
        $_res = self::resize($sourceImage, $targetSizeWidth, $targetSizeHeight, BX_RESIZE_IMAGE_EXACT);

        return $_res;
    }

}