gpt4 book ai didi

php - 无损图像旋转与 PHP

转载 作者:行者123 更新时间:2023-11-30 08:56:52 25 4
gpt4 key购买 nike

我一直在研究一个系统来旋转上传的图像。该算法的工作原理如下:

 1) User uploads a jpeg.  It gets saved as a PNG
2) Link to the temp png is returned to the user.
3) The user can click 90left,90right, or type in N degrees to rotate
4) The png is opened using

$image = imagecreatefrompng("./fileHERE");

5) The png is rotated using

$imageRotated = imagerotate($image,$degrees,0);

6) The png is saved and the link returned to the user.
7) If the user wishes to rotate more go back to step 3 operating on the newly
saved temporary PNG,
else the changes are commited and the final image is saved as a jpeg.

这在左右旋转 90 度时效果很好。用户可以无限旋转多次而不会降低质量。问题是当用户尝试旋转 20 度(或其他一些非 90 的倍数)时。旋转 20 度时,图像会轻微旋转,并形成一个黑框来填充需要填充的区域。由于图像(带有黑框)被保存为 png,下一次旋转 20 度会将图像(带有黑框)再旋转 20 度并形成另一个黑框来弥补松弛。长话短说,如果你这样做到 360 度,你将在一个非常小的剩余图像周围有一个大黑框。即使您放大并裁剪掉黑框,也会出现明显的质量损失。

有什么方法可以避免黑匣子? (服务器没有安装imagick)

最佳答案

始终存储未修改的源文件,并且在旋转时,使用原始源文件旋转度数。所以 20 度 + 20 度,意味着将源旋转 40 度。

  1. 用户上传 JPEG。
  2. 用户可以单击“向左 90”、“向右 90”或输入 N 度进行旋转。
  3. 使用

    打开 png
    $image = imagecreatefromjpeg("./source.jpg");
  4. png 被旋转了...

    // If this is the first time, there is no rotation data, set it up
    if(!isset($_SESSION["degrees"])) $_SESSION["degrees"] = 0;

    // Apply the new rotation
    $_SESSION["degrees"] += $degrees;

    // Rotate the image
    $rotated = imagerotate($image, $_SESSION["degrees"], 0);

    // Save the image, DO NOT MODIFY THE SOURCE FILE!
    imagejpeg($rotated, "./last.jpg");

    // Output the image
    header("Content-Type: image/jpeg");
    imagejpeg($rotated);
  5. 如果用户希望旋转更多,则返回第 3 步,否则 last.jpg 将被视为最终的并且 $_SESSION["degrees"]参数被销毁。

关于php - 无损图像旋转与 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12897104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com