썸네일 관련하여 게시판을 생성하는데.. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

썸네일 관련하여 게시판을 생성하는데.. 정보

썸네일 관련하여 게시판을 생성하는데..

본문

썸네일 사용하려고 게시판을 생성하는데

게시판에 스킨파일을 넣었는데

다른 설정을 해줘야 하나요~?

처음 파일 등록할때도 썸네일에 대해서 파일이미지가 보이지 않더라구요 무엇이 문제인지를

알수가 없네요..

---thumbnail.lib.php---
<?php
// 디렉토리네 파일 삭제
function dell_file($rx_dir){
$dir_open = opendir($rx_dir);
while (false !== ($dir_read = readdir($dir_open))) {
if (is_file($rx_dir.'/'.$dir_read)) @unlink($rx_dir.'/'.$dir_read);
}
closedir($dir_open);
}
// 디렉토리네 파일선택 삭제
function dell_one($rx_dir, $filename){
$dir_open = opendir($rx_dir);
@unlink($rx_dir.'/'.$filename);
closedir($dir_open);
}

// 경고창
function alerts($text){
echo  "<script lange='java script'>alert(\"$text\");</script>";
}

// 임시파일 확인
function rinix_file($dir){
global $board_skin_path;
$file_dir_open = opendir("$dir");
$f = 0;
while (false !== ($dir_read = readdir($file_dir_open))) {
if(is_file("$dir/$dir_read")){
$f++;
}
}
closedir($file_dir_open);

$url = $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI'];
$url = str_replace("&", "||", $url);

if($f > 0) $text = "<a href='$board_skin_path/suspension.filedell.php?url=$url'>임시파일 <font color='red'>{$f}개</font>가 있습니다. 삭제 하시겠습니까?</a>";
return $text;
}
// 부족한 섬네일 확인
function rinix_tb($dir, $tb_width, $tb_height){
global $board_skin_path, $bo_table;

$tb_dir = $dir."/thumbnail";

$file_dir_open = opendir($dir);
$i = 0;

while (false !== ($dir_read = readdir($file_dir_open))) {
if(is_file("$dir/$dir_read")){
$type = file_type($dir_read);

if($type == "jpg" || $type == "gif" || $type == "png"){

// 이미지 비률 수정및 이미지 포멧방식 체크
list($width, $height, $img_type) = getimagesize("$dir/$dir_read");
if($img_type >= 1 || $img_type <= 3){
if($tb_width < $width || $tb_height < $height){
if(!is_file("$tb_dir/$dir_read")){
$i++;
}
}
}
}
}
}
closedir($file_dir_open);

$url = $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI'];
$url = str_replace("&", "||", $url);

if($i > 0){ $text = "<a href='$board_skin_path/thumbnail.make.php?tb_width=$tb_width&tb_height=$tb_height&bo_table=$bo_table&url=$url'>섬네일 <font color='red'>{$i}개</font>가 필요합니다. 생성 하시겠습니까?</a>"; }
return $text;
}

function file_type($file){
$file = explode(".", $file);
$no = count($file)-1;
$type = $file[$no];
return $type;
}

function make_tb($fname, $bo_table, $tb_x, $tb_y){

echo $fname." / ".$bo_table." / ".$tb_x." / ".$tb_y."<br>";
// 이미지 컷팅위치 0~10 까지
$r_xcut = 5;
$r_ycut = 2;

$r_filename = $fname; // 파일이름
$rr_filename = "../../../data/file/$bo_table/".$r_filename;
$r_save_root = "../../../data/file/$bo_table/thumbnail"; // 저장장소
// 이미지 비률 수정및 이미지 포멧방식 체크
list($r_width, $r_height, $r_img_type) = getimagesize($rr_filename);

$r_fname = $r_save_root."/".$r_filename;


// 설정된 썸네일 크기
$r_img_width = $tb_x;
$r_img_height = $tb_y;

// 이미지 크기 검사
if($r_img_width < $r_width && $r_img_height < $r_height){ // 섬내일 가로, 세로 크기보다 이미지 가로, 세로 크기가 모두 클때
// 가로 크기를 기준으로 섬네일 가로크기비률에 맞춰 사이즈를 조정한다.
$r_percent = $r_width / $r_img_width;
$r_new_width = $r_width / $r_percent;
$r_new_height = $r_height / $r_percent;
// 위에서 사이즈 조정을 했을시 여백이 생긴다면 다시 세로를 기준으로 사이즈를 조정한다.
if($r_img_height > $r_new_height){
$r_percent = $r_height / $r_img_height;
$r_new_width = $r_width / $r_percent;
$r_new_height = $r_height / $r_percent;
}
}else{ // 섬내일 가로, 세로 크기보다 이미지 가로, 세로 크기가 모두 작을때
// 생성될 이미지 사이즈와 원본이미지 사이즈의 크기를 모두 같이 설정한다. 이때 섬네일 사이즈는 무시한다.
if($r_img_width >= $r_width){
$r_img_width = $r_width;
}else{
$r_img_width = $r_img_width;
}
if($r_img_height >= $r_height){
$r_img_height = $r_height;
}else{
$r_img_height = $r_img_height;
}

$r_new_width = $r_width;
$r_new_height = $r_height;


// 섬내일과 축소된이미지의 가로 크기를 비교하여 잘라낼 위치를 찾는다.
if($r_img_width == $r_new_width){
$r_over_width = 0;
}else{
$r_over_width = ($r_img_width - $r_new_width)*($r_xcut/10);
}
// 섬내일과 축소된이미지의 세로 크기를 비교하여 잘라낼 위치를 찾는다.
if($r_img_height == $r_new_height){
$r_over_height = 0;
}else{
$r_over_height = ($r_img_height - $r_new_height)*($r_ycut/10);
}
}


echo $r_img_width." / ".$r_img_height;
// 기본바탕색의 지정된 섬내일 사이즈의 이미지틀을 만든다.(PHP 4 >= 4.0.6, PHP 5)
$r_image_p = imagecreatetruecolor($r_img_width, $r_img_height); //이 함수는 GD 2.0.1 이상이 필요합니다. (2.0.28 이상을 권장합니다)
$bgcolor = imagecolorallocatealpha($r_image_p, 255, 255, 255, 127);
imagefill($r_image_p, 0, 0, $bgcolor);

// 확장자를 구별하여 이미지 포멧을 변환한다. (PHP 4, PHP 5)
if($r_img_type == 1){
$r_image = imagecreatefromgif($rr_filename);
}else if($r_img_type == 2){
$r_image = imagecreatefromjpeg($rr_filename);
}else if($r_img_type == 3){
$r_image = imagecreatefrompng($rr_filename);
}

// 원본이미지의 사이즈를 위에서 계산된 비률에 맞게 사이즈를 축소하고 섬내일 크기로 잘라낸다. (PHP 4 >= 4.0.6, PHP 5)
$r_image_s = imagecopyresampled($r_image_p, $r_image, $r_over_width, $r_over_height, 0, 0, $r_new_width, $r_new_height, $r_width, $r_height);

// 포멧에 맞추어 이미지를 저장한다. (PHP 4, PHP 5)
if($r_img_type == 1){
imagegif($r_image_p, $r_fname);
}else if($r_img_type == 2){
imagejpeg($r_image_p, $r_fname, 100);
}else if($r_img_type == 3){
imagepng($r_image_p, $r_fname);
}

// 메모리에 있는 그림 삭제 (PHP 4, PHP 5)
imagedestroy($r_image);
imagedestroy($r_image_p);

// 올라간 파일의 퍼미션을 변경합니다.
        chmod($r_fname, 0606);

return $r_fname;
}
?>

--thumbnail.make.php

<?

$g4_path = "../../.."; // common.php 의 상대 경로

include_once("$g4_path/common.php");

include_once("./thumbnail.lib.php");



if ($is_admin == "super") {



$dir = "../../../data/file/$bo_table";

$tb_dir = $dir."/thumbnail";



// 디렉토리 생성 (퍼미션 변경)

@mkdir($tb_dir, 0707);

@chmod($tb_dir, 0707);



$file_dir_open = opendir($dir);



while (false !== ($dir_read = readdir($file_dir_open))) {

if(is_file("$dir/$dir_read")){

$type = file_type($dir_read);



if($type == "jpg" || $type == "gif" || $type == "png"){



// 이미지 비률 수정및 이미지 포멧방식 체크

list($width, $height, $img_type) = getimagesize("$dir/$dir_read");

if($img_type >= 1 || $img_type <= 3){

if($tb_width < $width || $tb_height < $height){

if(!is_file("$tb_dir/$dir_read")){

$src = make_tb($dir_read, $bo_table, $tb_width, $tb_height);

echo "<img src=\"$src\">";

}

}

}

}

}

}

closedir($file_dir_open);



$url = "http://".str_replace("||", "&", $url);

goto_url($url);

}


?>

-- thumbnail_upload.php

<?

include("thumbnail.lib.php");

//미리보기할 이미지 넘버

$num = $tbnum;



//임지서장경로

$rx_dir = "../../../data/rinix";

//echo $num." 번이미지<br>";



// 디렉토리 생성 (퍼미션 변경)

@mkdir($rx_dir, 0707);

@chmod($rx_dir, 0707);



// 이미지 컷팅위치 0~10 까지

$r_xcut = 5;

$r_ycut = 2;



if($_FILES['bf_file']){



//파일 속성 저장

$uf_name = $_FILES['bf_file']['name'][$num];

$uf_type = $_FILES['bf_file']['type'][$num];

$uf_size = $_FILES['bf_file']['size'][$num];

$uf_tmp_name = $_FILES['bf_file']['tmp_name'][$num];

$uf_error = $_FILES['bf_file']['error'][$num];



//파일 업로드 검사 (PHP 4.2.0부터, PHP는 파일 배열에 적절한 에러 코드를 반환합니다.)

switch($uf_error){

case (1) :

alerts("업로드한 파일이 php.ini ".ini_get('upload_max_filesize')." 지시어보다 큽니다.");

case (2) :

alerts("업로드한 파일이 HTML 폼에서 지정한 MAX_FILE_SIZE 지시어보다 큽니다.");

case (3) :

alerts("파일이 일부분만 전송되었습니다.");

case (4) :

alerts("파일이 전송되지 않았습니다.");

}



// 디렉토리네 파일 삭제

//dell_file($rx_dir);

//파일 이름구하기

$uf_rename = explode(".", $uf_name);

$uf_nacnt = count($uf_rename)-1;

for($i=0; $i<$uf_nacnt; $i++){

if($i>0) $re_name = $re_name.".";

$re_name = $re_name.$uf_rename[$i];

}

//타입

$uf_type = $uf_rename[$uf_nacnt];



//파일이름 변경

$uf_name = str_replace('%', '', urlencode($re_name));



$dest_file = $rx_dir."/".$uf_name.".".$uf_type;



// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.

$error_code = move_uploaded_file($uf_tmp_name, $dest_file) or die($_FILES[bf_file][error]);



// 올라간 파일의 퍼미션을 변경합니다.

chmod($dest_file, 0606);



$uf_url = "../data/rinix/".$uf_name.".".$uf_type;

//echo "<br>이름 : $re_name <br> 타입 : $uf_type";





$r_filename = $dest_file;

$f_frname = $uf_name."1.".$uf_type;

$r_fname = $rx_dir."/".$f_frname;



$tb_url = "../data/rinix/".$f_frname;



// 썸내일 크기

$r_img_width = $tbx; // 가로

$r_img_height = $tby; // 세로



// 이미지 비률 수정및 이미지 포멧방식 체크

list($r_width, $r_height, $r_img_type) = getimagesize($dest_file);



// 확장자가 GIF,JPG,PNG 가 안일시에 에러메시지 출력

if($r_img_type<1 or $r_img_type > 3){

alerts("섬네일 생성은 GIF, JPG, PNG 만 가능합니다.");

exit;

}



// 이미지 크기 검사

if($r_img_width < $r_width && $r_img_height < $r_height){ // 섬내일 가로, 세로 크기보다 이미지 가로, 세로 크기가 모두 클때

// 가로 크기를 기준으로 섬네일 가로크기비률에 맞춰 사이즈를 조정한다.

$r_percent = $r_width / $r_img_width;

$r_new_width = $r_width / $r_percent;

$r_new_height = $r_height / $r_percent;

// 위에서 사이즈 조정을 했을시 여백이 생긴다면 다시 세로를 기준으로 사이즈를 조정한다.

if($r_img_height > $r_new_height){

$r_percent = $r_height / $r_img_height;

$r_new_width = $r_width / $r_percent;

$r_new_height = $r_height / $r_percent;

}

}else{ // 섬내일 가로, 세로 크기보다 이미지 가로, 세로 크기가 모두 작을때

// 생성될 이미지 사이즈와 원본이미지 사이즈의 크기를 모두 같이 설정한다. 이때 섬네일 사이즈는 무시한다.

if($r_img_width >= $r_width){

$r_img_width = $r_width;

}else{

$r_img_width = $r_img_width;

}

if($r_img_height >= $r_height){

$r_img_height = $r_height;

}else{

$r_img_height = $r_img_height;

}



$r_new_width = $r_width;

$r_new_height = $r_height;

}

// 섬내일과 축소된이미지의 가로 크기를 비교하여 잘라낼 위치를 찾는다.

if($r_img_width == $r_new_width){

$r_over_width = 0;

}else{

$r_over_width = abs($r_img_width - $r_new_width)*($r_xcut/10);

}

// 섬내일과 축소된이미지의 세로 크기를 비교하여 잘라낼 위치를 찾는다.

if($r_img_height == $r_new_height){

$r_over_height = 0;

}else{

$r_over_height = abs($r_img_height - $r_new_height)*($r_ycut/10);

}

// 기본바탕색의 지정된 섬내일 사이즈의 이미지틀을 만든다.(PHP 4 >= 4.0.6, PHP 5)

$r_image_p = imagecreatetruecolor($r_new_width, $r_new_height); //이 함수는 GD 2.0.1 이상이 필요합니다. (2.0.28 이상을 권장합니다)

// 바탕을 투명으로 들기위해 투명색지정

$bgcolor = imagecolorallocatealpha($r_image_p, 255, 255, 255, 127);

// 바탕을 투명색으로 변경

imagefill($r_image_p, 0, 0, $bgcolor);



// 확장자를 구별하여 이미지 포멧을 변환한다. (PHP 4, PHP 5)

if($r_img_type == 1){

$r_image = imagecreatefromgif($r_filename);

}else if($r_img_type == 2){

$r_image = imagecreatefromjpeg($r_filename);

}else if($r_img_type == 3){

$r_image = imagecreatefrompng($r_filename);

}



// 원본이미지의 사이즈를 위에서 계산된 비률에 맞게 사이즈를 축소하고 섬내일 크기로 잘라낸다. (PHP 4 >= 4.0.6, PHP 5)

$r_image_s = imagecopyresampled($r_image_p, $r_image, 0, 0, 0, 0, $r_new_width, $r_new_height, $r_width, $r_height);



// 포멧에 맞추어 이미지를 저장한다. (PHP 4, PHP 5)

if($r_img_type == 1){

imagegif($r_image_p, $r_fname);

}else if($r_img_type == 2){

imagejpeg($r_image_p, $r_fname, 100);

}else if($r_img_type == 3){

imagepng($r_image_p, $r_fname);

}



// 메모리에 있는 그림 삭제 (PHP 4, PHP 5)

imagedestroy($r_image);

imagedestroy($r_image_p);

?>

<script language="javascript">

parent.document.getElementById("thumbnail").style.width = "<?=$r_new_width?>";

parent.document.getElementById("thumbnail").style.height = "<?=$r_new_height?>";

parent.document.getElementById("thumbnail").style.background = "url('<?=$tb_url?>')";

parent.document.getElementById("mask").style.left = <?=$r_over_width?>;

parent.document.getElementById("mask").style.top = <?=$r_over_height?>;

parent.document.getElementById("mask").style.width = "<?=$r_img_width?>";

parent.document.getElementById("mask").style.height = "<?=$r_img_height?>";

parent.document.getElementById("tb_bu").style.width = "<?=$r_img_width?>";

parent.document.getElementById("tb_bu").style.height = "<?=$r_img_height?>";

parent.document.getElementById("tb_name[<?=$num?>]").value =  "<?=$f_frname?>";

parent.document.getElementById("loc_x[<?=$num?>]").value =  <?=$r_over_width?>;

parent.document.getElementById("loc_y[<?=$num?>]").value =  <?=$r_over_height?>;

parent.document.getElementById("ma_width[<?=$num?>]").value = "<?=$r_img_width?>";

parent.document.getElementById("ma_height[<?=$num?>]").value = "<?=$r_img_height?>";

parent.document.getElementById("tb_width[<?=$num?>]").value = "<?=$r_new_width?>";

parent.document.getElementById("tb_height[<?=$num?>]").value = "<?=$r_new_height?>";

parent.document.getElementById("tbnum").value =  <?=$num?>;

</script>

<?

// 파일 삭제

dell_one($rx_dir, $uf_name.".".$uf_type);

//dell_one($rx_dir, $f_frname);

}else{

alerts("파일을 먼저 선택해주세요.");

}

?>

댓글 전체

전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT