如何旋转图像然后保存新的旋转图像?

时间:2018-05-15 18:32:32

标签: javascript php jquery image image-manipulation

我正在尝试添加按钮单击时旋转图像的功能,然后单击提交按钮时,图像将被旋转保存。因此,它不能仅使用CSS在视觉上进行旋转,而是将图像文件本身旋转然后保存在原始图像文件的顶部。

我正在考虑使用imagerotate使用PHP进行此操作,但仍然不能100%确定在单击按钮时旋转图像的正确方法。然后在提交时保存旋转的按钮。

<?php
// File and rotation
$filename = 'test.jpg';
$degrees = 180;

// Content type
header('Content-type: image/jpeg');

// Load
$source = imagecreatefromjpeg($filename);

// Rotate
$rotate = imagerotate($source, $degrees, 0);

// Output
imagejpeg($rotate);

// Free the memory
imagedestroy($source);
imagedestroy($rotate);
?>

只是不确定如何使用上面的代码并在单击按钮时使其工作。然后在单击提交按钮时保存。如果使用javascript / jquery有一个更简单的解决方案,我也可以使用它,如果它是一个更容易/更好的实现。

1 个答案:

答案 0 :(得分:0)

如果要覆盖服务器上的原始图像文件,只需在最终的imagejpeg()调用中添加参数,以指示要保存结果的位置:

public boolean accept(Object obj)

请注意,JPEG是一种有损格式,因此任何重新保存(即使您不旋转)都会对图像质量产生影响。您可以将图像质量指定为同一调用的第3个参数(如果您希望以增加文件大小为代价尽量保留尽可能多的质量):

imagejpeg($rotate, $filename);

现在,如果这是处理客户端图像,那就是另一回事了。 PHP在服务器上运行,因此它只能处理同一服务器上也可以访问的图像。服务器上的PHP无法旋转并覆盖访问者计算机上的图像。

为了实现这一点,必须将图像从访问者上传到服务器,然后旋转,然后访问者需要手动将图像保存回自己的计算机。 PHP无法触及访问者计算机的文件系统,也无法通过FORCE访问者浏览器下载和覆盖现有文件。

因此,如果这一切都在服务器端,那么你所拥有的PHP方法肯定会有效。