如何在 JS / jQuery 上裁剪具有透明背景的 JPG 和 PNG

发布于 2024-12-03 14:33:17 字数 309 浏览 1 评论 0原文

我正在使用一个名为“jcrop”的插件,它非常好,你可以在这里看到它:

http: //howhack.com/crop/demos/crop2.php

问题是这个插件不支持透明背景的 png。

javascript / jQuery 中是否有类似的脚本/插件支持透明背景的 png?

我需要这个长宽比为 16:9 的矩形,最终图像始终为 640x360,这就是我尝试使用这个“jcrop”的原因。

I'm using a plugin named "jcrop", it's pretty nice, you can see it here:

http://howhack.com/crop/demos/crop2.php

The issue is this plugin do not support png with transparent backgrounds.

Is there a similar script/plugin in javascript / jQuery that supports png with transparent backgrounds?

I need this rectangle thing with aspect ratio 16:9 and a final image always 640x360, that's why I'm trying to use this "jcrop".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

生来就爱笑 2024-12-10 14:33:17

我假设该插件通过 PHP 在服务器上进行图像编辑?如果是这样,您需要进行一些特殊的调用来保留 PNG 图像中的 alpha 透明度:

$x = $_GET["x"];
$y = $_GET["y"];
$w = $_GET["w"];
$h = $_GET["h"];

// Load the original image.
$img = imagecreatefrompng($img_path);
imagealphablending($img, true);

// Create a blank canvas for the cropped image.
$img_cropped = imagecreatetruecolor($w, $h);
imagesavealpha($img_cropped, true);
imagealphablending($img_cropped, false);
$transparent = imagecolorallocatealpha($img_cropped, 0, 0, 0, 127);
imagefill($img_cropped, 0, 0, $transparent);

// Crop the image and store the data on the blank canvas.
imagecopyresampled($img_cropped, $img, 0, 0, $x, $y, $w, $h, $w, $h); // or imagecopy()

// Save the image.
imagepng($img_cropped, "image_cropped.png", 2);

// Free memory.
imagedestroy($img);
imagedestroy($img_cropped);

在 PHP 的 imagecopyresampled() 的讨论中多次提到这一点 此处

I'm assuming the plugin does the image editing on the server via PHP? If so, you need to make a few special calls to preserve alpha transparency in PNG images:

$x = $_GET["x"];
$y = $_GET["y"];
$w = $_GET["w"];
$h = $_GET["h"];

// Load the original image.
$img = imagecreatefrompng($img_path);
imagealphablending($img, true);

// Create a blank canvas for the cropped image.
$img_cropped = imagecreatetruecolor($w, $h);
imagesavealpha($img_cropped, true);
imagealphablending($img_cropped, false);
$transparent = imagecolorallocatealpha($img_cropped, 0, 0, 0, 127);
imagefill($img_cropped, 0, 0, $transparent);

// Crop the image and store the data on the blank canvas.
imagecopyresampled($img_cropped, $img, 0, 0, $x, $y, $w, $h, $w, $h); // or imagecopy()

// Save the image.
imagepng($img_cropped, "image_cropped.png", 2);

// Free memory.
imagedestroy($img);
imagedestroy($img_cropped);

This is touched on a few times in the discussion for PHP's imagecopyresampled() here.

莫相离 2024-12-10 14:33:17

您可以更轻松地使用画布,如果您想保存它,只需通过帖子将原始画布数据发送到服务器即可?
http://www.nihilogic.dk/labs/canvas2image/

但是如果你想使用这个插件,我建议你看看你的服务器的 php 配置。许多服务器仍然只支持 jpeg 和 gif 作为其默认 php 配置的一部分。如果你想检查这一点,请创建一个包含以下代码的 php 文件:

phpinfo();

?>

然后上传并在您的服务器上查看。您应该在页面上查找“libpng”:
http://www.php.net/manual/en/image.requirements.php

you can do the with canvas so much easier and if you want to save it you just send the raw canvas data to the server via post?
http://www.nihilogic.dk/labs/canvas2image/

But if you want to use this plugin, what I would suggest is that you look at your server's php configuration. A lot of servers still only support jpeg and gif as part of their default php configurations. If you want to check this make a php file with this code in it:

phpinfo();

?>

and then upload and view it on your server. you should look for "libpng" on the page:
http://www.php.net/manual/en/image.requirements.php

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文