|
Хотел сегодня рассказать вам, а небольшом хаке для DLE. Система
создания уменьшенной копии картинки для новости происходит следующим
образом, к примеру, у нас есть фотография размерами 1024*768, в
админпанели в настройках стоит параметр уменьшения картинки, скажем, до
200 пикселей. Это говорит о том, что самая большая сторона фотографии
после уменьшения станет равной 200 пикселям, а другая пропорционально
уменьшится ещё до более низкого значения. Мне не так давно для одного
из проектов потребовалось, чтобы уменьшенная копия рисунка стала
квадратной. Чтобы и высота, и ширина имели равные стороны.
Скажем 200*200. Для этого пришлось изменить класс для уменьшения картинок, а именно переписать всего лишь одну функцию. Приведу код. Откроем файл engine/inc/makethumb.php И найдём там функцию: <!-- code1 -->
<!--
ecode1
-->
<!--
ecode2
-->
function size_auto($size = 100) { global $gd_version; if ($this->img["lebar"] < $size AND $this->img["tinggi"] < $size ) { $this->img["lebar_thumb"] = $this->img["lebar"]; $this->img["tinggi_thumb"] = $this->img["tinggi"]; return 0; } elseif ($this->img["lebar"] >= $this->img["tinggi"]) { $this->img["lebar_thumb"] = $size; $this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"]; } else { $this->img["tinggi_thumb"] = $size; $this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"]; } if($gd_version==1) { $this->img["des"] = imagecreate($this->img["lebar_thumb"],$this->img["tinggi_thumb"]); @imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]); } elseif($gd_version==2) { $this->img["des"] = imagecreatetruecolor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]); @imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]); } $this->img["src"] = $this->img["des"]; return 1; } <!-- code2 --> и заменим на: <!-- code1 -->
<!--
ecode1
-->
function size_auto($size = 100) {
<!--
ecode2
-->
global $gd_version; // lebar - x // tinngi - y if ($this -> img["lebar"] < $size AND $this->img["tinggi"] < $size ) { $this -> img["lebar_thumb"] = $this->img["lebar"]; $this -> img["tinggi_thumb"] = $this->img["tinggi"]; return 0; } else { $this -> img["tinggi_thumb"] = $size; $this -> img["lebar_thumb"] = $size; } // Если библиотека версии 1 используем более простое обрезание if($gd_version == 1) { //создаём новое изображение $this->img["des"] = imagecreate($this->img["lebar_thumb"], $this->img["tinggi_thumb"]); // Вырезаем участок рисунка if ($this->img["lebar_thumb"] > $this->img["tinggi_thumb"]) @imagecopyresized($this->img["des"], $this->img["src"], 0, 0, round((max($this->img["lebar"], $this->img["tinggi"]) - min($this->img["lebar"], $this->img["tinggi"]))/2), 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], min($this->img["lebar"], $this->img["tinggi"]), min($this->img["lebar"],$this->img["tinggi"])); if ($this->img["lebar_thumb"] < $this->img["tinggi_thumb"]) @imagecopyresized($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], min($this->img["lebar"], $this->img["tinggi"]), min($this->img["lebar"], $this->img["tinggi"])); if ($this->img["lebar_thumb"] == $this->img["tinggi_thumb"]) @imagecopyresized($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]); // Если библиотека версии 2 используем более сложное обрезание } elseif($gd_version == 2) { //создаём новое изображение $this->img["des"] = imagecreatetruecolor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]); // Вырезаем участок рисунка if ($this->img["lebar_thumb"] > $this->img["tinggi_thumb"]) @imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, round((max($this->img["lebar"], $this->img["tinggi"]) - min($this->img["lebar"], $this->img["tinggi"]))/2), 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], min($this->img["lebar"], $this->img["tinggi"]), min($this->img["lebar"],$this->img["tinggi"])); if ($this->img["lebar_thumb"] < $this->img["tinggi_thumb"]) @imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], min($this->img["lebar"], $this->img["tinggi"]), min($this->img["lebar"], $this->img["tinggi"])); if ($this->img["lebar_thumb"] == $this->img["tinggi_thumb"]) @imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]); } $this->img["src"] = $this->img["des"]; return 1; } <!-- code2 --> Теперь все уменьшенные копии будут получаться квадратными.
|
Партнеры Опрос
Как вам новый дизайн?
|