for the image, you can apply it as a bakground, as an image <img> or via a pseudo. text can be plain text or also injected from a pseudo. This is your choice
Background and pseudo can be used through classes, so it is easily reusable but the markup might be missing its meaning if you get an empty button
Shape can be drawn via clip-path. ( here is a tool to help draw and get familiar with it : https://bennettfeely.com/clippy/ )
Borders and shadow of the shapes can be drawn via filter ( see drop-shadow ) , but requires an extra markup level to make each button independant. let's use a <b></b> (unless you need it for fa-icon)
Here is an example of the idea , you can use class or single ids to set each button a different look.
.btn b {
display: inline-block;
background-color: red;
border: none;
color: white;
padding: 12px 16px;
font-size: 16px;
cursor: pointer;
clip-path: polygon(0% 14%, 0% 100%, 87% 100%, 100% 88%, 100% 0%, 12% 0%);
}
.btn {
border: none;
background: none;
filter: drop-shadow(2px 0 gray) drop-shadow(-2px 0 gray) drop-shadow(0 2px gray) drop-shadow(0 -2px gray);
}
.btn:hover {
filter: drop-shadow(0 0 5px blue)
}
/* demo purpose */
.btn+.btn b:before {
content: url(https://picsum.photos/id/175/20/20);
display: block;
margin: auto;
}
.btn+.btn b:after {
content: "text";
}
body {
background:url(https://picsum.photos/id/185/300/200) 0 0 / cover ;
}
<button class="btn">
<b>☎<br>phone</b>
</button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
edit
here is a javascript example to show/hide img on click
var btns = document.querySelectorAll("button.btn")
for (let i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", () => {
btns[i].classList.toggle("hide");
})
}
/* added */ .btn.hide b:before {opacity:0}
.btn b {
display: inline-block;
background-color: red;
border: none;
color: white;
padding: 12px 16px;
font-size: 16px;
cursor: pointer;
clip-path: polygon(0% 14%, 0% 100%, 87% 100%, 100% 88%, 100% 0%, 12% 0%);
}
.btn {
border: none;
background: none;
filter: drop-shadow(2px 0 gray) drop-shadow(-2px 0 gray) drop-shadow(0 2px gray) drop-shadow(0 -2px gray);
}
.btn:hover {
filter: drop-shadow(0 0 5px blue)
}
/* demo purpose */
.btn b:before {
content: url(https://picsum.photos/id/175/20/20);
display: block;
margin: auto;
}
.btn b:after {
content: "text";
}
body {
background:url(https://picsum.photos/id/185/300/200) 0 0 / cover ;
}
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>
<button class="btn"><b></b></button>