gpt4 book ai didi

javascript - 如何在php中使用一张图像绘制形状

转载 作者:IT老高 更新时间:2023-10-28 12:08:36 25 4
gpt4 key购买 nike

我需要使用一张图像创建一个框架图像。

例如:

用户将从后端上传一张图片:

enter image description here

现在我需要根据前端用户的要求在前端创建一个框架(用户将选择框架的高度和宽度,然后他将选择这个图像 block ),如下所示:

enter image description here

我没有办法做到这一点,我曾尝试通过 css 和 html canvas 做到这一点,但没有运气。

有人可以建议我如何通过使用 PHP 或 CSS 或 HTML 或 JavaScript 或任何方式来实现这一点。

您可以在此处查看工作示例,这实际上是我需要做的。

Create your own frame

最佳答案

预处理图像至关重要

无论是由您手动完成,还是通过 GD 库以某种方式在运行中完成,您绝对至少需要拍摄您收到的图像...

enter image description here

...然后裁剪并收紧它,使其像这样干净(边缘周围没有空白区域并且去除了凹口/切口):

enter image description here

然后你就有了一个你可以实际使用的图像。

否则,纯 CSS/JAVASCRIPT

注意:我不是在这里做 javascript。它将用于动态设置元素大小,如 html 中所示。

通常我会使用大量的 :before 和 ':after' 伪元素来保持 html 不那么困惑,但是由于您需要动态调整框架大小,所以我们需要使用嵌套 div 元素的数量,用于设置对某些 div 元素至关重要的宽度和高度的动态样式(如果 javascript 可以访问这些元素或者如果不需要动态调整大小,其中一些仍然是伪元素)。

注意:到目前为止,我只在 Chrome 和 Firefox 中对此进行了测试。真正的旧浏览器肯定会惨遭失败。

/* implementation of framing */

.frameit {
/* width and height must be set dynamically by javascript see html */
position: relative;
box-sizing: border-box;
overflow: hidden;
padding: 20px; /* at least border size */
}

.frameit:before,
.frameit:after,
.frameit .sides > div,
.frameit .corner > div {
position: absolute;
background-image: url(http://i.stack.imgur.com/vAgqj.jpg);
background-size: 100% 20px; /* 100% and border size */
height: 20px; /* equal to border width of frameit div */
}

.frameit:before {
content: '';
top: 0;
left: 0;
right: 0;
}

.frameit:after {
content: '';
bottom: 0;
left: 0;
right: 0;
}

.frameit .sides {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
}

.frameit .sides > div {
/* width must be set dynamically by javascript see html */
height: 20px;
}

.frameit .sides > div:first-child {
top: 0;
left: 20px; /* border width */
transform-origin: 0 0;
transform: rotate(90deg);
}

.frameit .sides > div:last-child {
bottom: 0;
right: 20px; /* border width */
transform-origin: 100% 100%;
transform: rotate(90deg);
}

.frameit .sides ~ .corner { /* all corners */
position: absolute;
z-index: 2;
width: 29px; /* square root of ((border-width squared) x 2) round up */
height: 29px; /* match width */
overflow: hidden;
}

.frameit .TL {
top: 0;
left: 0;
transform-origin: 0 0;
transform: rotate(-45deg);
}

.frameit .TL > div {
top: inherit;
left: inherit;
transform-origin: inherit;
transform: rotate(45deg);
}

.frameit .TR {
top: 0;
right: 0;
transform-origin: 100% 0;
transform: rotate(45deg);
}

.frameit .TR > div {
top: 0;
right: 0;
transform-origin: 100% 0;
transform: rotate(-45deg);
}

.frameit .BR {
bottom: 0;
right: 0;
transform-origin: 100% 100%;
transform: rotate(-45deg);
}

.frameit .BR > div {
bottom: inherit;
right: inherit;
transform-origin: inherit;
transform: rotate(45deg);
}

.frameit .BL {
bottom: 0;
left: 0;
transform-origin: 0 100%;
transform: rotate(45deg);
}

.frameit .BL > div {
bottom: inherit;
left: inherit;
transform-origin: inherit;
transform: rotate(-45deg);
}

/* Optional shading to help define the joint */
.frameit .sides > div:first-child:before,
.frameit .sides > div:last-child:before {
content: '';
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
background-color: rgba(0,0,0,.07);
}
<div class="frameit" style="width: 200px; height: 300px;">
<!-- top and bottom and overall container
width and height assumed to be set by javacript by user
-->
<div class="sides">
<!-- left and right sides
widths of the children are equal to HEIGHT of container and are
assumed to be set by javacript by user
-->
<div style="width: 300px;"></div>
<div style="width: 300px;"></div>
</div>
<div class="TL corner"><!-- top left bevel --><div style="width: 200px;"></div></div>
<div class="TR corner"><!-- top right bevel --><div style="width: 200px;"></div></div>
<div class="BR corner"><!-- bottom right bevel --><div style="width: 200px;"></div></div>
<div class="BL corner"><!-- bottom left bevel --><div style="width: 200px;"></div></div>
</div>

关于javascript - 如何在php中使用一张图像绘制形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33514840/

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