그누보드 [G5] 이미지 업로드시 사이즈 변경 (리사이징) - TYPE2
페이지 정보
본문
요즘 스마트폰에서 이미지 촬영후 바로 업로드하는 경우가 빈번한데요.
이경우 5000픽셀 이상이고 용량도 3~8MB 크기가 업로드되서 관리에 무척 곤란함을 느낄수 있습니다
이럴때 이미지를 자동으로 관리하는 방법입니다
원본파일이 삭제되고 사이즈 변경된 이미지만 서버에 남기는 방법이므로, 원본 고해상도가 필요한 경우에는 적용하면 안됩니다.
자료원본 : https://sir.kr/g5_plugin/6165
5.4.0.2 버전 이상에서 작동됩니다.
1. 게시판 이미지 폭 크기
게시판에 이미지 파일 첨부시 JPG, PNG 파일은 이미지 width 가 게시판 설정된 width 값 보다 크다면,
원본 파일은 삭제되고 게시판 설정된 width 값으로 썸네일 이미지로 대체 됩니다.
2. 에디터
SmartEditor ... CUSTOM_EDITOR_RESIZE_WIDTH 상수 코드의 width값에 의해 변경된 이미지가 저장됩니다
그외 에디터는 아직 자동 이미지 변경이 안됩니다
CKEditor 등 준비되면 내용을 업데이트 하겠습니다
3. extend / file_upload_size.extend.php 파일을 생성해서 아래 내용을 업로드 합니다
<?php
if (!defined('_GNUBOARD_')) exit; // Unable to access direct pages
//return;
// 작성 : thisgun ( https://sir.kr/g5_plugin/6165 )
// 수정 : 해피정닷컴 ( https://www.happyjung.com/lecture/3017 )
// 게시판의 경우 게시판 설정에서 이미지 폭 크기 값으로 resize 됩니다.
define('CUSTOM_EDITOR_RESIZE_WIDTH', 1200); // SmartEditor(스마트에디터)에서 업로드된 이미지 폭의 값을 설정
add_replace('write_update_upload_file', 'custom_upload_file_resize', 10, 4);
add_replace('get_editor_upload_url', 'custom_editor_upload_url', 10, 3);
// bbs/view_image.php 에서 이미지를 호출시 위의 상수값 CUSTOM_EDITOR_RESIZE_WIDTH 보다 이미지 width 값이 크다면 CUSTOM_EDITOR_RESIZE_WIDTH 으로 파일을 리사이즈 합니다.
add_replace('get_view_imagesize', 'custom_get_view_imagesize', 10, 3);
function custom_get_view_imagesize($size, $filepath, $editor_file){
if( isset($size[0]) && (int) $size[0] > CUSTOM_EDITOR_RESIZE_WIDTH ){
$filepath = custom_imagefile_resize($filepath, CUSTOM_EDITOR_RESIZE_WIDTH);
$size = @getimagesize($filepath);
}
return $size;
}
function custom_imagefile_resize($dest_file, $thumb_width=0){
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
$size = @getimagesize($dest_file);
if(empty($size))
return $dest_file;
if(in_array($size[2], array(IMAGETYPE_JPEG, IMAGETYPE_PNG))) {
if(function_exists('exif_read_data')) {
// exif 정보를 기준으로 회전각도 구함
$exif = @exif_read_data($dest_file);
$degree = 0;
if(!empty($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$degree = 90;
break;
case 3:
$degree = 180;
break;
case 6:
$degree = -90;
break;
}
// 회전각도를 구한다.
if($degree) {
// 세로사진의 경우 가로, 세로 값 바꿈
if($degree == 90 || $degree == -90) {
$tmp = $size;
$size[0] = $tmp[1];
$size[1] = $tmp[0];
}
}
}
}
// 원본 width가 thumb_width보다 작다면
if($size[0] <= $thumb_width)
return $dest_file;
$thumb_height = ceil($thumb_width * $size[1] / $size[0]);
$path_parts = pathinfo($dest_file);
if( $path_parts['dirname'] ){
$thumb = thumbnail($path_parts['basename'], $path_parts['dirname'], $path_parts['dirname'], $thumb_width, $thumb_height, true, true);
if($thumb) {
@unlink($dest_file);
rename($path_parts['dirname'].'/'.$thumb, $dest_file);
}
}
}
return $dest_file;
}
function custom_editor_upload_url($fileurl, $filepath, $args=array()){
global $config;
if( $config['cf_editor'] === 'smarteditor2' && (defined('SMARTEDITOR_UPLOAD_RESIZE') && SMARTEDITOR_UPLOAD_RESIZE) ){
return $fileurl;
}
if ( file_exists($filepath) && defined('CUSTOM_EDITOR_RESIZE_WIDTH') && CUSTOM_EDITOR_RESIZE_WIDTH ){
$thumb_width = CUSTOM_EDITOR_RESIZE_WIDTH;
$filepath = custom_imagefile_resize($filepath, $thumb_width);
}
return $fileurl;
}
function custom_upload_file_resize($dest_file, $board, $wr_id, $w){
if( file_exists($dest_file) && $board['bo_image_width'] ){
// 게시판 관리자에서 설정된 width 값
$thumb_width = $board['bo_image_width'];
$dest_file = custom_imagefile_resize($dest_file, $thumb_width);
}
return $dest_file;
}
이경우 5000픽셀 이상이고 용량도 3~8MB 크기가 업로드되서 관리에 무척 곤란함을 느낄수 있습니다
이럴때 이미지를 자동으로 관리하는 방법입니다
원본파일이 삭제되고 사이즈 변경된 이미지만 서버에 남기는 방법이므로, 원본 고해상도가 필요한 경우에는 적용하면 안됩니다.
자료원본 : https://sir.kr/g5_plugin/6165
5.4.0.2 버전 이상에서 작동됩니다.
1. 게시판 이미지 폭 크기
게시판에 이미지 파일 첨부시 JPG, PNG 파일은 이미지 width 가 게시판 설정된 width 값 보다 크다면,
원본 파일은 삭제되고 게시판 설정된 width 값으로 썸네일 이미지로 대체 됩니다.
2. 에디터
SmartEditor ... CUSTOM_EDITOR_RESIZE_WIDTH 상수 코드의 width값에 의해 변경된 이미지가 저장됩니다
그외 에디터는 아직 자동 이미지 변경이 안됩니다
CKEditor 등 준비되면 내용을 업데이트 하겠습니다
3. extend / file_upload_size.extend.php 파일을 생성해서 아래 내용을 업로드 합니다
<?php
if (!defined('_GNUBOARD_')) exit; // Unable to access direct pages
//return;
// 작성 : thisgun ( https://sir.kr/g5_plugin/6165 )
// 수정 : 해피정닷컴 ( https://www.happyjung.com/lecture/3017 )
// 게시판의 경우 게시판 설정에서 이미지 폭 크기 값으로 resize 됩니다.
define('CUSTOM_EDITOR_RESIZE_WIDTH', 1200); // SmartEditor(스마트에디터)에서 업로드된 이미지 폭의 값을 설정
add_replace('write_update_upload_file', 'custom_upload_file_resize', 10, 4);
add_replace('get_editor_upload_url', 'custom_editor_upload_url', 10, 3);
// bbs/view_image.php 에서 이미지를 호출시 위의 상수값 CUSTOM_EDITOR_RESIZE_WIDTH 보다 이미지 width 값이 크다면 CUSTOM_EDITOR_RESIZE_WIDTH 으로 파일을 리사이즈 합니다.
add_replace('get_view_imagesize', 'custom_get_view_imagesize', 10, 3);
function custom_get_view_imagesize($size, $filepath, $editor_file){
if( isset($size[0]) && (int) $size[0] > CUSTOM_EDITOR_RESIZE_WIDTH ){
$filepath = custom_imagefile_resize($filepath, CUSTOM_EDITOR_RESIZE_WIDTH);
$size = @getimagesize($filepath);
}
return $size;
}
function custom_imagefile_resize($dest_file, $thumb_width=0){
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
$size = @getimagesize($dest_file);
if(empty($size))
return $dest_file;
if(in_array($size[2], array(IMAGETYPE_JPEG, IMAGETYPE_PNG))) {
if(function_exists('exif_read_data')) {
// exif 정보를 기준으로 회전각도 구함
$exif = @exif_read_data($dest_file);
$degree = 0;
if(!empty($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$degree = 90;
break;
case 3:
$degree = 180;
break;
case 6:
$degree = -90;
break;
}
// 회전각도를 구한다.
if($degree) {
// 세로사진의 경우 가로, 세로 값 바꿈
if($degree == 90 || $degree == -90) {
$tmp = $size;
$size[0] = $tmp[1];
$size[1] = $tmp[0];
}
}
}
}
// 원본 width가 thumb_width보다 작다면
if($size[0] <= $thumb_width)
return $dest_file;
$thumb_height = ceil($thumb_width * $size[1] / $size[0]);
$path_parts = pathinfo($dest_file);
if( $path_parts['dirname'] ){
$thumb = thumbnail($path_parts['basename'], $path_parts['dirname'], $path_parts['dirname'], $thumb_width, $thumb_height, true, true);
if($thumb) {
@unlink($dest_file);
rename($path_parts['dirname'].'/'.$thumb, $dest_file);
}
}
}
return $dest_file;
}
function custom_editor_upload_url($fileurl, $filepath, $args=array()){
global $config;
if( $config['cf_editor'] === 'smarteditor2' && (defined('SMARTEDITOR_UPLOAD_RESIZE') && SMARTEDITOR_UPLOAD_RESIZE) ){
return $fileurl;
}
if ( file_exists($filepath) && defined('CUSTOM_EDITOR_RESIZE_WIDTH') && CUSTOM_EDITOR_RESIZE_WIDTH ){
$thumb_width = CUSTOM_EDITOR_RESIZE_WIDTH;
$filepath = custom_imagefile_resize($filepath, $thumb_width);
}
return $fileurl;
}
function custom_upload_file_resize($dest_file, $board, $wr_id, $w){
if( file_exists($dest_file) && $board['bo_image_width'] ){
// 게시판 관리자에서 설정된 width 값
$thumb_width = $board['bo_image_width'];
$dest_file = custom_imagefile_resize($dest_file, $thumb_width);
}
return $dest_file;
}
댓글목록
등록된 댓글이 없습니다.