2013-06-30 6 views
0

Я пытаюсь отобразить загруженное изображение вместе с водяным знаком текста в другом размере, используя php-image-magician, не сохраняя изображение.image resize using php image magician

вот коды:

<?php 

$errors = array(); 

function mimeValidator($imagefile) 
{ 
$imageInfo = getimagesize($imagefile); 
$allowedMimes = array('image/jpg', 'image/jpeg', 'image/png'); 

if(!in_array($imageInfo['mime'], $allowedMimes)) 
$errors[] = "Only jpg and png images are supported"; 
} 

function renderImage($imageSource, $watermark, $fontSize, $font) 
{ 
$imageInfo = getimagesize($imageSource); 
list($width,$height) = getimagesize($imageSource); 

if($imageInfo['mime'] == 'image/jpg' || $imageInfo['mime'] == 'image/jpeg') 
$imageSource = imagecreatefromjpeg($imageSource); 
elseif($imageInfo['mime'] == 'image/png') 
$imageSource = imagecreatefrompng($imageSource); 

$image = imagecreatetruecolor($width, $height); 
$blue = imagecolorallocate($image, 79, 166, 185); 
$text = imagettftext($imageSource, $fontSize, 0, 20, ($height-20), $blue, $font,  $watermark); 

ob_start(); 
imagejpeg($imageSource); 
$image = ob_get_contents(); 
ob_end_clean(); 

return base64_encode($image); 
} 

?><html> 
<head> 
<title> 
image Watermark and resize 
</title> 

<style type="text/css"> 
body{ width:800px; margin: 15px auto; padding:0px; font-family: arial}  

</style> 
</head> 
<body> 
<form name="imageUpload" id="imageUpload" method="post" enctype="multipart/form-data" > 
<fieldset> 
<legend>Image text watermark</legend> 
Text: <input type="text" name="text" id="text"/><br /> 
Image: <input type="file" name="image" id="image"/><br /> 
<input type="submit" name="submit" id="createmark" value="Submit" /> 
</fieldset> 
<?php 

if(isset($_POST['submit'])) 
{ 
if($_POST['text'] == '') 
$errors[] = "Text is too short"; 

if($_FILES['image']['tmp_name'] == '') 
$errors[] = "Please upload a image"; 
else 
mimeValidator($_FILES['image']['tmp_name']); 

if(count($errors) == 0) 
       { 
include('php-image-magician/php_image_magician.php'); 

$magicianObj = new imageLib($_FILES["image"]["tmp_name"]); 
$magicianObj -> resizeImage(100, 200); 
$magicianObj -> saveImage($imagename); 
echo "<img src=\"data:image/gif;base64," . renderImage($_FILES["image"]["tmp_name"], $_POST['text'], 30, "./arial.ttf") . "\" />"; 
} 
else 
{ 
echo "<ul>"; 

foreach($errors as $error) 
echo "<li>{$error}</li>"; 

echo "</ul>"; 
} 

} 
?> 
</form> 
</body> 
</html> 

я получаю сообщение об ошибке "файл C: \ XAMPP \ TMP \ php9E3D.tmp отсутствует или недействительный" Я Newbee в этом. пожалуйста помогите.

ответ

1

Я никогда не использовал php-image-magician, поэтому следующее вполне может быть ложной информацией.

Из того, что я вижу:

$magicianObj = new imageLib($_FILES["image"]["tmp_name"]); 

Внутренне imageLib вызовы openImage, которые в свою очередь, выполняет следующие действия: 1) он проверяет, является ли файл на самом деле существует 2) он проверяет расширение и использует правильный imagecreatefrom_ _ _ функция.

Здесь возникают проблемы. Когда вы загружаете файлы на свой веб-сервер, они сохраняются под временным именем файла (в вашем примере «php9E3D.tmp»). Это расширение (.tmp) не входит в список разрешенных расширений для php-image-magician (.jpg, .jpeg, .gif, .png, .bmp, .psd). Таким образом, внутренняя переменная image получает значение false, и вся библиотека не будет работать.

У вас есть несколько вариантов решения этого вопроса:

1) Переписать PHP-образ-мага (в частности openImage), это, однако, не рекомендуется.

2) Переименуйте загруженный файл, используя move_uploaded_file, см. Пример # 2 here.

3) Избавьтесь от зависимости от PHP-образом-мага и использовать ПГПС внутренних функции (imagescale и друзья, вы уже создаете ресурс изображения для работы в вашей функции renderImage)

Надеется, что это помогает ,

+0

Хороший звонок! Возможно, есть много сценариев изменения размера для PHP, которые действительно хорошо написаны. Просто выполните простой поиск Google. – OptimusCrime