如何使用 PHP 将裁剪后的图像保存到带有 Jcrop 的目录

Posted

技术标签:

【中文标题】如何使用 PHP 将裁剪后的图像保存到带有 Jcrop 的目录【英文标题】:How to save cropped image to a directory with Jcrop using PHP 【发布时间】:2012-11-13 23:47:37 【问题描述】:

我可以裁剪我的图像并单击裁剪。但后来出了点问题,因为我不知道如何保存这张图片。

我使用 php 中的 imagecreatefromjpeg。 这段代码如下所示:

<?php
SESSION_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST')

$targ_w = 200;
$targ_h = 400;
$jpeg_quality = 90;

$src = $_SESSION['target_path'];
$img_r = imagecreatefromjpeg($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
$targ_w,$targ_h,$_POST['w'],$_POST['h']);

//header('Content-type: image/jpeg');
imagejpeg($dst_r, 'uploads/cropped/' . 'filename');

exit;


?>

我保存原始图像的 php 代码如下所示:

     <?php 
         session_start();
         $target = "uploads/"; 
         $target = $target . basename( $_FILES['filename']['name']) ; 
         $_SESSION['target_path'] = $target;

         $ok=1; 
         if(move_uploaded_file($_FILES['filename']['tmp_name'], $target)) 
         
         echo "De afbeelding *". basename( $_FILES['filename']['name']). "* is geupload naar de map 'uploads'";
          
         else 
         echo "Sorry, er is een probleem met het uploaden van de afbeelding.";
         
    ?> 

如何保存裁剪后的图像? 有没有办法通过覆盖原始图像来保存裁剪的图像,所以我只得到裁剪的图像?

提前致谢。

编辑: 我现在可以保存 1 张照片。我将我的代码编辑为: imagejpeg($dst_r, 'uploads/cropped/' . $filename .'boek.jpg'); 但是我必须创建一个函数,该函数可以使用另一个名称保存多个文件。并且可能会覆盖保存在'uploads/'中的原始图像

【问题讨论】:

您要保存到的文件夹 -- uploads\cropped -- 是否存在? 那么您可能应该在所有图像函数调用中添加错误检查。 imagecreatefromjpeg、imagecreatetruecolor、imagecopyresampled 和 imagejpeg 在失败时都返回 false。如果您对所有呼叫都执行if (! $img_r = imagecreatefromjpeg($src)) die ('here is the problem'); 之类的操作,您很快就会发现问题。 但我的代码 imagejpeg($dst_r, 'uploads/cropped/' . 'filename');不对,所以现在上传一个名为 filename 的文件。但是我如何调用我的图像源以便上传图像 还有其他人知道如何解决这个问题吗? 【参考方案1】:

我现在要回答似乎是什么问题:

但我必须创建一个可以保存多个文件的函数 另一个名字。并且可能会覆盖保存在 '上传/'

一个简单的方法是在文件名中添加时间戳,这样每次执行操作时,你都会得到一个新的文件名。做一些类似的事情:

imagejpeg($dst_r, 'uploads/cropped/' . $filename . time() . 'boek.jpg');

每次都会保存一张新图片。

当你想覆盖原来的,只需分配正确的路径

imagejpeg($dst_r, 'uploads/' . $filename .'.jpg');

编辑:似乎问题在于获得正确的文件名,而不是硬编码“boek.jpg”。

贴出的原代码在保存图片时使用了字符串filename

imagejpeg($dst_r, 'uploads/cropped/' . 'filename');

您要做的是从$src 推断文件名。为此,只需使用函数basename(文档here),您将拥有:

imagejpeg($dst_r, 'uploads/cropped/' . basename($src)); // basename will already contain the extension

【讨论】:

我会试试这个。看起来很简单:) 它保存了正确的图像,但名称如下:1354113593boek 我实际上希望将名为:boek1 的原始文件覆盖为新文件。所以我没有得到重复的文件。 我想我不明白你所说的save multiple files with each another name 是什么意思。让我重写一下…… 这正是我的意思:D 现在它就像一个魅力!谢谢!

以上是关于如何使用 PHP 将裁剪后的图像保存到带有 Jcrop 的目录的主要内容,如果未能解决你的问题,请参考以下文章

我只想将裁剪后的图像保存到图库中。但它保存了原始的完整图像。如何只保存裁剪的图像?

使用 CrobBox 将裁剪后的图像上传到 PHP

使用 laravel 将裁剪后的图像保存在 public/uploads 文件夹中

使用 PHP yii 框架以带有图像预览和裁剪工具的注册表单上传图像?

PHP实现的自定义图像居中裁剪函数示例

上传时如何裁剪图像?