После обрезки изображения оно становится черным. Пожалуйста, помогите мне, если можете. Почему это сохраняет заднее изображение? Что за проблема произошла? Возможно, мне нужна какая-то библиотека изображений? Вот что я сделал до сих пор:
<?php
if($_POST['frm'] == 'desktop' ) {
$file_cnt = $_POST['file'];
$file_size = filesize($file_cnt);
$upload_dir = ABSPATH;
$path = $upload_dir.'wp-content/themes/poster/destop_imag';
define('DIRECTORY', $path );
$img = rand().time().'.jpg';
$upload_pt = $path.'/'.$img;
if(empty($_POST['wl']) && empty($_POST['hl'])) {
//move_uploaded_file($file_cnt, $upload_pt);
$content = file_get_contents($_POST['file']);
file_put_contents(DIRECTORY.'/'.$img.'', $content);
} else {
$targ_w = $_POST['wl']; $targ_h = $_POST['hl'];
$jpeg_quality = 100;
$path_parts = pathinfo($img);
$newfilename = $_SERVER['DOCUMENT_ROOT'].'/poster/wp-content/themes/poster/destop_imag/'.$img;
if ($path_parts['extension'] == 'jpg') {
$img_r = imagecreatefromjpeg($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
imagecopyresampled($dst_r,$img_r,0,0,$_POST['xl'],$_POST['yl'],$targ_w,$targ_h,$_POST['wl'],$_POST['hl']);
//header('Content-type: image/jpeg');
imagejpeg($dst_r,$newfilename,$jpeg_quality);
//echo '<script>window.location.href="'.get_page_link(27).'?crop_stat=1"</script>';
//exit;
} elseif ($path_parts['extension'] == 'png') {
$img_r = imagecreatefrompng($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
imagecopyresampled($dst_r,$img_r,0,0,$_POST['xl'],$_POST['yl'],
$targ_w,$targ_h,$_POST['wl'],$_POST['hl']);
//header('Content-type: image/jpeg');
imagepng($dst_r,$newfilename);
echo '<script>window.location.href="'.get_page_link(27).'?crop_stat=1"</script>';
exit;
} elseif ($path_parts['extension'] == 'gif') {
$img_r = imagecreatefromgif($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
imagecopyresampled($dst_r,$img_r,0,0,$_POST['xl'],$_POST['yl'],
$targ_w,$targ_h,$_POST['wl'],$_POST['hl']);
//header('Content-type: image/jpeg');
imagegif($dst_r,$newfilename);
echo '<script>window.location.href="'.get_page_link(27).'?crop_stat=1"</script>';
exit;
} else {
echo "Source file is not a supported image file type.";
}
}
}
?>
Javascript
<script type="text/javascript">
$(function(){
$('#cropbox').Jcrop({
aspectRatio: 1,
onSelect: updateCoords,
minSize : [329,329]
});
});
function updateCoords(c)
{
$('#x').val(c.x);
$('#y').val(c.y);
$('#w').val(c.w);
$('#h').val(c.h);
};
function checkCoords()
{
if (parseInt($('#w').val())) return true;
alert('Please select a crop region then press submit.');
return false;
};
</script>
вам нужна библиотека gd, установленная на вашем сервере:
Для CentOS:
sudo yum install php-gd
Для Debian и Ubuntu:
sudo apt-get install php5-gd
Вы должны загрузить свой файл так:
Загрузить новое изображение:
Кроме того, не пытайтесь угадать MIME-тип изображения по окончанию файла, а получите его MIME-тип напрямую:
if($_FILES['userfile']['type']=="image/jpeg") $src_image = imagecreatefromjpeg($uploaddir.$filename);
if($_FILES['userfile']['type']=="image/png") $src_image = imagecreatefrompng($uploaddir.$filename);
Но я думаю, что ваша ошибка исходит из неправильных путей:
file_put_contents(DIRECTORY.'/'.$img.'', $content);
сохраняет файл
но вы загружаете его
$img_r = imagecreatefrompng($src);
что такое $src
? он пустой, как я вижу в вашем коде, поэтому ваше изображение равно нулю, что приводит к черному изображению после копирования.
с помощью приведенной выше формы вы можете обработать изображение следующим образом:
$goodimage = 0;
$upload_dir = ABSPATH.'wp-content/themes/poster/destop_imag/';
if(is_array($_FILES['userfile'])) {
$filename = basename($_FILES['userfile']['name']);
$uploadfile = $upload_dir . $filename;
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
if($_FILES['userfile']['type']=="image/jpeg" || $_FILES['userfile']['type']=="image/png") {
if($_FILES['userfile']['type']=="image/jpeg") $src_image = imagecreatefromjpeg($uploaddir.$filename);
if($_FILES['userfile']['type']=="image/png") $src_image = imagecreatefrompng($uploaddir.$filename);
$goodimage = 1;
} else {
$error = "Wrong file format: ".$_FILES['userfile']['type']."<br>Please upload in .jpg or .png format.";
}
}
}
$newheight = 100;
$x = imagesx($src_image);
$y = imagesy($src_image);
$dst_image_content = imagecreatetruecolor($x/($y/$newheight),$newheight);
imagecopyresampled($dst_image_content, $src_image, 0, 0, 0, 0, $x/($y/$newheight), $newheight, $x, $y);
imagejpeg($dst_image_content, $upload_dir."resized-".$filename,99);
код загружает изображение, представленное вышеупомянутой формой, и изменяет его размер до высоты 100 пикселей, сохраняя его впоследствии с именем файла «resized -». $ filename
Других решений пока нет …