두 이미지를 PHP와 병합
두 이미지를 PHP로 병합하려고 합니다.
예를 들면...이미지 1을 이미지 2 위에 배치하거나 기본 PHP와 병합하는 방법은 무엇입니까?워터마크 등을 시도해 봤지만 효과가 없는 것 같습니다.
이미지 1
이미지 2
...그리고 이렇게 변했나요?최종 결과:
내가 만든 것부터 작동했어.
<?php
$dest = imagecreatefrompng('vinyl.png');
$src = imagecreatefromjpeg('cover2.jpg');
imagealphablending($dest, false);
imagesavealpha($dest, true);
imagecopymerge($dest, $src, 10, 9, 0, 0, 181, 180, 100); //have to play with these numbers for it to work for you, etc.
header('Content-Type: image/png');
imagepng($dest);
imagedestroy($dest);
imagedestroy($src);
?>
질문은 두 이미지를 병합하는 것이지만, 이 지정된 경우에는 병합하지 마십시오.컨텐츠 이미지(커버)를,<img />
이미지를 CSS에 태그하고 스타일링합니다.왜요?
- 표지는 문서 내용에 속하는 반면, 비닐 레코드와 섀도는 페이지 스타일의 일부일 뿐입니다.
- 이러한 분리가 훨씬 사용하기 편리합니다.사용자는 그 이미지를 쉽게 복사할 수 있습니다.웹스파이더로 쉽게 색인화할 수 있습니다.
- 마지막으로 유지보수가 훨씬 쉬워졌습니다.
매우 간단한 코드를 사용합니다.
<div class="cover">
<img src="/content/images/covers/movin-mountains.png" alt="Moving mountains by Pneuma" width="100" height="100" />
</div>
.cover {
padding: 10px;
padding-right: 100px;
background: url(/style/images/cover-background.png) no-repeat;
}
ImageArtist는 제가 작성한 순수한 gd 래퍼입니다.이것에 의해, 복잡한 이미지 조작을 간단하게 실시할 수 있습니다.질문 해결은 이 강력한 라이브러리를 사용해 몇개의 스텝으로 실시할 수 있기 때문입니다.
다음은 샘플 코드입니다.
$img1 = new Image("./cover.jpg");
$img2 = new Image("./box.png");
$img2->merge($img1,9,9);
$img2->save("./merged.png",IMAGETYPE_PNG);
제 결과는 이렇습니다.
화상의 비율을 변경하지 않고 수평 또는 수직으로 화상을 Marge 하는 기능을 시험해 볼 수 있습니다.복사 붙여넣기만 하면 됩니다.
function merge($filename_x, $filename_y, $filename_result, $mergeType = 0) {
//$mergeType 0 for horizandal merge 1 for vertical merge
// Get dimensions for specified images
list($width_x, $height_x) = getimagesize($filename_x);
list($width_y, $height_y) = getimagesize($filename_y);
$lowerFileName = strtolower($filename_x);
if(substr_count($lowerFileName, '.jpg')>0 || substr_count($lowerFileName, '.jpeg')>0){
$image_x = imagecreatefromjpeg($filename_x);
}else if(substr_count($lowerFileName, '.png')>0){
$image_x = imagecreatefrompng($filename_x);
}else if(substr_count($lowerFileName, '.gif')>0){
$image_x = imagecreatefromgif($filename_x);
}
$lowerFileName = strtolower($filename_y);
if(substr_count($lowerFileName, '.jpg')>0 || substr_count($lowerFileName, '.jpeg')>0){
$image_y = imagecreatefromjpeg($filename_y);
}else if(substr_count($lowerFileName, '.png')>0){
$image_y = imagecreatefrompng($filename_y);
}else if(substr_count($lowerFileName, '.gif')>0){
$image_y = imagecreatefromgif($filename_y);
}
if($mergeType==0){
//for horizandal merge
if($height_y<$height_x){
$new_height = $height_y;
$new_x_height = $new_height;
$precentageReduced = ($height_x - $new_height)/($height_x/100);
$new_x_width = ceil($width_x - (($width_x/100) * $precentageReduced));
$tmp = imagecreatetruecolor($new_x_width, $new_x_height);
imagecopyresampled($tmp, $image_x, 0, 0, 0, 0, $new_x_width, $new_x_height, $width_x, $height_x);
$image_x = $tmp;
$height_x = $new_x_height;
$width_x = $new_x_width;
}else{
$new_height = $height_x;
$new_y_height = $new_height;
$precentageReduced = ($height_y - $new_height)/($height_y/100);
$new_y_width = ceil($width_y - (($width_y/100) * $precentageReduced));
$tmp = imagecreatetruecolor($new_y_width, $new_y_height);
imagecopyresampled($tmp, $image_y, 0, 0, 0, 0, $new_y_width, $new_y_height, $width_y, $height_y);
$image_y = $tmp;
$height_y = $new_y_height;
$width_y = $new_y_width;
}
$new_width = $width_x + $width_y;
$image = imagecreatetruecolor($new_width, $new_height);
imagecopy($image, $image_x, 0, 0, 0, 0, $width_x, $height_x);
imagecopy($image, $image_y, $width_x, 0, 0, 0, $width_y, $height_y);
}else{
//for verical merge
if($width_y<$width_x){
$new_width = $width_y;
$new_x_width = $new_width;
$precentageReduced = ($width_x - $new_width)/($width_x/100);
$new_x_height = ceil($height_x - (($height_x/100) * $precentageReduced));
$tmp = imagecreatetruecolor($new_x_width, $new_x_height);
imagecopyresampled($tmp, $image_x, 0, 0, 0, 0, $new_x_width, $new_x_height, $width_x, $height_x);
$image_x = $tmp;
$width_x = $new_x_width;
$height_x = $new_x_height;
}else{
$new_width = $width_x;
$new_y_width = $new_width;
$precentageReduced = ($width_y - $new_width)/($width_y/100);
$new_y_height = ceil($height_y - (($height_y/100) * $precentageReduced));
$tmp = imagecreatetruecolor($new_y_width, $new_y_height);
imagecopyresampled($tmp, $image_y, 0, 0, 0, 0, $new_y_width, $new_y_height, $width_y, $height_y);
$image_y = $tmp;
$width_y = $new_y_width;
$height_y = $new_y_height;
}
$new_height = $height_x + $height_y;
$image = imagecreatetruecolor($new_width, $new_height);
imagecopy($image, $image_x, 0, 0, 0, 0, $width_x, $height_x);
imagecopy($image, $image_y, 0, $height_x, 0, 0, $width_y, $height_y);
}
$lowerFileName = strtolower($filename_result);
if(substr_count($lowerFileName, '.jpg')>0 || substr_count($lowerFileName, '.jpeg')>0){
imagejpeg($image, $filename_result);
}else if(substr_count($lowerFileName, '.png')>0){
imagepng($image, $filename_result);
}else if(substr_count($lowerFileName, '.gif')>0){
imagegif($image, $filename_result);
}
// Clean up
imagedestroy($image);
imagedestroy($image_x);
imagedestroy($image_y);
}
merge('images/h_large.jpg', 'images/v_large.jpg', 'images/merged_har.jpg',0); //merge horizontally
merge('images/h_large.jpg', 'images/v_large.jpg', 'images/merged.jpg',1); //merge vertically
GD 라이브러리 또는 ImageMagick을 사용합니다.저는 'PHP GD merge images'를 검색해서 여러 개의 기사를 얻었어요.이전에는 큰 빈 이미지를 만들고 그 이미지를 원래 빈 이미지에 붙여넣기 위해 imagecopymerge()를 사용했습니다.구글에서 기사를 보면 바로 사용할 수 있는 소스 코드를 찾을 수 있습니다.
이것은 ImageMagick 확장으로 실행할 수 있습니다.combine Images() 메서드는 당신이 원하는 것을 할 수 있을 것입니다.
2개의 이미지 png와 jpg/png의 결합 [이미지 마스킹]
//URL or Local path
$src_url = '1.png';
$dest_url = '2.jpg';
$src = imagecreatefrompng($src_url);
$dest1 = imagecreatefromjpeg($dest_url);
//if you want to make same size
list($width, $height) = getimagesize($dest_url);
list($newWidth, $newHeight) = getimagesize($src_url);
$dest = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($dest, $dest1, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
list($src_w, $src_h) = getimagesize($src_url);
//merger with same size
$this->imagecopymerge_alpha($dest, $src, 0, 0, 0, 0, $src_w, $src_h, 100);
//show output on browser
header('Content-Type: image/png');
imagejpeg($dest);
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct)
{
$cut = imagecreatetruecolor($src_w, $src_h);
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}
PHP의 GD 이미지 조작 라이브러리는 PHP의 이미지로 작업하는 데 가장 적합합니다.이미지 복사 기능(imagecopy, imagecopymerge 등) 중 하나를 시도합니다.각각 다른 방식으로 두 이미지를 결합합니다.자세한 내용은 이미지 복사 관련 php 문서를 참조하십시오.
언급URL : https://stackoverflow.com/questions/3876299/merging-two-images-with-php
'source' 카테고리의 다른 글
MySQL은 단일 쿼리에 여러 인덱스를 사용할 수 있습니까? (0) | 2022.11.28 |
---|---|
Javascript에서 개체에서 빈 특성 제거 (0) | 2022.11.28 |
디렉토리가 존재하는지 확인하려면 어떻게 해야 합니까?" is_filename", "file_filename" 또는 둘 다입니까? (0) | 2022.11.28 |
MyISAM에 비해 TokuDB와 InnoDB 삽입이 느린 이유 (0) | 2022.11.28 |
ImportError: Python2를 사용하는 mysql.connector라는 이름의 모듈이 없습니다. (0) | 2022.11.28 |