Fully Customizable Character Card Generator In jQuery
File Size: | 214 KB |
---|---|
Views Total: | 601 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |

An easy-to-use yet fully customizable character card generator written jQuery, Bootstrap 5, Bootstrap Icons, dom-to-image, and FileSaver.js.
Features:
- Custom character name.
- Custom avatar.
- Custom background image.
- Custom quote.
- Custom colors.
- Custom avatar shape: circle, diamond, hexagon, or square.
- Rounded corners.
- Download the character card as a PNG image.
How to use it:
1. Load the necessary JavaScript and CSS files in the document.
<!-- Bootstrap 5 --> <link rel="stylesheet" href="/path/to/cdn/bootstrap.min.css" /> <script src="/path/to/cdn/bootstrap.min.js"></script> <!-- Bootstrap Icons --> <link rel="stylesheet" href="/path/to/cdn/bootstrap-icons.min.css" /> <!-- jQuery Library --> <script src="/path/to/cdn/jquery.min.js"></script> <!-- DOM to Image Library --> <script src="/path/to/cdn/dom-to-image.min.js"></script> <!-- Font Picker --> <script src="assets/js/FontPicker.js"></script> <!-- File Saver Library --> <script src="/path/to/cdn/FileSaver.min.js"></script> <!-- Character Card Generator Files --> <link rel="stylesheet" href="assets/css/style.css" /> <script src="assets/js/script.js"></script>
2. The HTML for the Character Card Generator.
<main class="flex-grow-1 p-3"> <div class="container"> <div id="main" class="px-2 py-3"> <div class="row g-3"> <div class="col-12 col-xl-6 order-1 order-xl-0"> <div class="tab-content"> <div class="tab-pane fade show active" id="ccg-simple-content" role="tabpanel" aria-labelledby="ccg-simple-tab"> <h3 class="main-header px-2 pt-0 pb-2">Simple Settings</h3> <div id="ccg-input" class="px-2"> <div class="mb-2"> <input type="text" id="ccg-name-input" class="form-control rounded-0" placeholder="Character's Name..." name="ccg-name-input" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Character Name" /> </div> <div class="mb-2"> <div class="input-group"> <input type="text" id="ccg-avatar-input" class="form-control border-end-0 rounded-0" placeholder="Avatar Image URL..." name="ccg-avatar-input" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Avatar Image URL" /> <input type="file" id="ccg-avatar-upload" class="form-control rounded-0 d-none" name="ccg-avatar-upload" onchange="avatarUploadOutput(this)" /> <label for="ccg-avatar-upload" class="form-label btn btn-link rounded-0 m-0" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Avatar Image Upload"><i class="bi bi-upload"></i></label> </div> </div> <div class="mb-2"> <div class="input-group"> <input type="text" id="ccg-background-input" class="form-control border-end-0 rounded-0" placeholder="Background Image URL..." name="ccg-background-input" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Background Image URL" /> <input type="file" id="ccg-background-upload" class="form-control rounded-0 d-none" name="ccg-background-upload" onchange="backgroundUploadOutput(this)" /> <label for="ccg-background-upload" class="form-label btn btn-link rounded-0 m-0" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Background Image Upload"><i class="bi bi-upload"></i></label> </div> </div> <div class="mb-2"> <textarea id="ccg-quote-input" class="form-control rounded-0" placeholder="Short Quote..." name="ccg-quote-input" data-bs-toggle="tooltip" data-bs-trigger="hover" data-bs-placement="top" title="Character Quote"></textarea> </div> </div> </div> <div class="tab-pane fade" id="ccg-advanced-content" role="tabpanel" aria-labelledby="ccg-advanced-tab"> <h3 class="main-header px-2 pt-0 pb-2">Advanced Settings</h3> <div id="ccg-input" class="px-2"> <div class="mb-2"> <select class="form-select rounded-0" id="ccg-card-layout" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Card Layout<br>Default: Normal"> <option selected disabled>Card Layout</option> <option value="normal">Normal</option> <option value="reversed">Reversed</option> </select> </div> <div class="mb-2"> <select class="form-select rounded-0" id="ccg-avatar-shape" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Avatar Shape<br>Default: Diamond"> <option selected disabled>Avatar Shape</option> <option value="none">None</option> <option value="circle">Circle</option> <option value="diamond">Diamond</option> <option value="hexagon">Hexagon</option> <option value="square">Square</option> </select> </div> <div class="mb-2"> <select class="form-select rounded-0" id="ccg-card-corners" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Rounded Card Corners<br>Default: None"> <option selected disabled>Rounded Corners</option> <option value="none">None</option> <option value="small">Small</option> <option value="medium">Medium</option> <option value="large">Large</option> </select> </div> <div class="d-flex flex-row mb-2"> <div id="font-picker-name" class="w-100" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Name Font<br>Default: EB Garamond"> <!-- Loaded via FontPicker.js --> </div> <button class="btn btn-link border-start-0 rounded-0" onclick="ccgResetNameFont()" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Reset Name Font"><i class="bi bi-arrow-counterclockwise"></i></button> </div> <div class="d-flex flex-row mb-2"> <div class="input-group"> <select class="form-select rounded-0 flex-shrink-1" id="ccg-name-font-size" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Name Font Size<br>Default: Large"> <option selected disabled>Size</option> <option value="xsmall">X-Small</option> <option value="small">Small</option> <option value="medium">Medium</option> <option value="large">Large</option> <option value="xlarge">X-Large</option> </select> <select class="form-select rounded-0 flex-shrink-1" id="ccg-name-text-alignment" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Align Name Text<br>Default: Left"> <option selected disabled>Alignment</option> <option value="left">Left</option> <option value="center">Center</option> <option value="right">Right</option> </select> <select class="form-select rounded-0 flex-shrink-1" id="ccg-name-font-weight" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Name Font Weight<br>Default: Normal"> <option selected disabled>Weight</option> <option value="lighter">Lighter</option> <option value="light">Light</option> <option value="normal">Normal</option> <option value="bold">Bold</option> <option value="bolder">Bolder</option> </select> <div data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Name Font Italics<br>Default: Unitalicized"> <input id="ccg-name-font-italics" class="form-check-input rounded-0 d-none m-0" type="checkbox" value="name-italics" /> <label for="ccg-name-font-italics" class="form-label btn btn-link rounded-0 m-0"><i class="bi bi-type-italic"></i></label> </div> </div> </div> <div class="d-flex flex-row mb-2"> <div class="input-group"> <div class="d-flex flex-grow-1 w-50" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Name Letter Spacing<br>Default: 0"> <input type="range" id="ccg-name-letter-spacing" class="form-range rounded-0 flex-grow-1 px-2 py-0 w-75" name="ccg-name-letter-spacing" min="0.0" max="0.6" step="0.15" value="0.0" /> <span id="ccg-name-letter-spacing-value" class="input-group-text form-range-value border-start-0 rounded-0 cursor-default d-inline-block px-2 text-center" style="min-width: 55px;">0</span> </div> <div class="d-flex flex-grow-1 w-50" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Name Word Spacing<br>Default: 0"> <input type="range" id="ccg-name-word-spacing" class="form-range rounded-0 flex-grow-1 px-2 py-0 w-75" name="ccg-name-word-spacing" min="0.0" max="0.3" step="0.075" value="0.0" /> <span id="ccg-name-word-spacing-value" class="input-group-text form-range-value border-start-0 rounded-0 cursor-default d-inline-block px-2 text-center" style="min-width: 60px;">0</span> </div> </div> </div> <div class="d-flex flex-row mb-2"> <div id="font-picker-quote" class="w-100" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Quote Font<br>Default: Montserrat"> <!-- Loaded via FontPicker.js --> </div> <button class="btn btn-link border-start-0 rounded-0" onclick="ccgResetQuoteFont()" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Reset Quote Font"><i class="bi bi-arrow-counterclockwise"></i></button> </div> <div class="d-flex flex-row mb-2"> <div class="input-group"> <select class="form-select rounded-0 flex-shrink-1" id="ccg-quote-font-size" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Quote Font Size<br>Default: X-Small"> <option selected disabled>Size</option> <option value="xxsmall">XX-Small</option> <option value="xsmall">X-Small</option> </select> <select class="form-select rounded-0 flex-shrink-1" id="ccg-quote-text-alignment" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Align Quote Text<br>Default: Left"> <option selected disabled>Alignment</option> <option value="left">Left</option> <option value="center">Center</option> <option value="right">Right</option> </select> <select class="form-select rounded-0 flex-shrink-1" id="ccg-quote-font-weight" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Quote Font Weight<br>Default: Normal"> <option selected disabled>Weight</option> <option value="lighter">Lighter</option> <option value="light">Light</option> <option value="normal">Normal</option> <option value="bold">Bold</option> <option value="bolder">Bolder</option> </select> <div data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Quote Font Italics<br>Default: Italicized"> <input id="ccg-quote-font-italics" class="form-check-input rounded-0 d-none m-0" type="checkbox" value="quote-italics" checked /> <label for="ccg-quote-font-italics" class="form-label btn btn-link rounded-0 m-0"><i class="bi bi-type-italic"></i></label> </div> </div> </div> <div class="d-flex flex-row mb-2"> <div class="input-group"> <div class="d-flex flex-grow-1 w-50" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Quote Letter Spacing<br>Default: 0"> <input type="range" id="ccg-quote-letter-spacing" class="form-range rounded-0 flex-grow-1 px-2 py-0 w-75" name="ccg-quote-letter-spacing" min="0.0" max="0.6" step="0.15" value="0.0" /> <span id="ccg-quote-letter-spacing-value" class="input-group-text form-range-value border-start-0 rounded-0 cursor-default d-inline-block px-2 text-center" style="min-width: 55px;">0</span> </div> <div class="d-flex flex-grow-1 w-50" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Quote Word Spacing<br>Default: 0"> <input type="range" id="ccg-quote-word-spacing" class="form-range rounded-0 flex-grow-1 px-2 py-0 w-75" name="ccg-quote-word-spacing" min="0.0" max="0.3" step="0.075" value="0.0" /> <span id="ccg-quote-word-spacing-value" class="input-group-text form-range-value border-start-0 rounded-0 cursor-default d-inline-block px-2 text-center" style="min-width: 60px;">0</span> </div> </div> </div> <div class="mb-2"> <div class="input-group"> <input type="color" id="ccg-outer-border-color" class="form-control form-control-color rounded-0 flex-shrink-1" name="ccg-outer-border-color" value="#3b3b3b" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Card Border Color<br>Default: R59, G59, B59" /> <input type="color" id="ccg-inner-border-color" class="form-control form-control-color rounded-0 flex-shrink-1" name="ccg-inner-border-color" value="#6e6e6e" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Text Separator Color<br>Default: R110, G110, B110" /> <input type="color" id="ccg-name-color" class="form-control form-control-color rounded-0 flex-shrink-1" name="ccg-name-color" value="#ffffff" data-bs-toggle="tooltip" data-bs-trigger="hover" data-bs-placement="top" title="Name Text Color<br>Default: R255, G255, B255" /> <input type="color" id="ccg-quote-color" class="form-control form-control-color rounded-0 flex-shrink-1" name="ccg-quote-color" value="#cccccc" data-bs-toggle="tooltip" data-bs-trigger="hover" data-bs-placement="top" title="Quote Text Color<br>Default: R204, G204, B204" /> <input type="color" id="ccg-text-shadow-color" class="form-control form-control-color rounded-0 flex-shrink-1" name="ccg-text-shadow-color" value="#000000" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Text Shadow Color<br>Default: R0, G0, B0" /> <input type="color" id="ccg-overlay-color" class="form-control form-control-color rounded-0 flex-shrink-1" name="ccg-overlay-color" value="#000000" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Background Overlay Color<br>Default: R0, G0, B0" /> <div class="d-flex flex-grow-1 w-50" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Background Overlay Opacity<br>Default: 75%"> <input type="range" id="ccg-overlay-opacity" class="form-range rounded-0 flex-grow-1 px-2 py-0 w-75" name="ccg-overlay-opacity" min="0" max="100" step="1" value="75" /> <span id="ccg-overlay-opacity-value" class="input-group-text form-range-value border-start-0 rounded-0 cursor-default d-inline-block px-2 text-center" style="min-width: 60px;">75%</span> </div> </div> </div> </div> </div> </div> <div class="nav px-2 py-0" id="ccg-settings-controls" role="tablist"> <button class="btn btn-link rounded-0 me-2" onclick="ccgCapture()" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Capture Card Image"><span class="d-none d-sm-inline">Capture</span><i class="bi bi-camera-fill d-sm-none"></i></button> <button class="btn btn-link rounded-0 me-2" onclick="ccgReset()" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Reset All Options"><span class="d-none d-sm-inline">Reset</span><i class="bi bi-arrow-counterclockwise d-sm-none"></i></button> <button class="btn btn-link nav-link rounded-0 me-2 p-0 active" id="ccg-simple-tab" data-bs-toggle="tab" data-bs-target="#ccg-simple-content" type="button" role="tab" aria-controls="ccg-simple-content" aria-selected="true"> <span class="px-3 py-2" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Simple Settings"><span class="d-none d-sm-inline">Simple</span><i class="bi bi-gear-fill d-sm-none"></i></span> </button> <button class="btn btn-link nav-link rounded-0 me-2 p-0" id="ccg-advanced-tab" data-bs-toggle="tab" data-bs-target="#ccg-advanced-content" type="button" role="tab" aria-controls="ccg-advanced-content" aria-selected="false"> <span class="px-3 py-2" data-bs-trigger="hover" data-bs-toggle="tooltip" data-bs-placement="top" title="Advanced Settings"><span class="d-none d-sm-inline">Advanced</span><i class="bi bi-gear-wide-connected d-sm-none"></i></span> </button> </div> </div> <div id="ccg-preview" class="col-12 col-xl-6 d-flex flex-column order-0 order-xl-1"> <h3 class="main-header px-2 pt-0 pb-2">Preview</h3> <div class="align-items-md-center d-flex flex-grow-1 justify-content-md-center overflow-auto px-2"> <div id="ccg-output"> <div class="card rounded-0 h-100" id="ccg-background-output"> <div class="card-img-overlay rounded-0 h-100 px-0 position-relative"> <i id="ccg-background-overlay" class="d-block h-100 position-absolute top-0 left-0 w-100"></i> <div class="d-flex flex-row px-3 position-absolute top-50 translate-middle-y w-100"> <div class="card-avatar"> <div class="h-100 w-100" id="ccg-avatar-output"> <!-- Loaded via script --> </div> </div> <div class="w-100"> <div class="card-title align-items-end d-flex m-0 position-relative w-100"> <h3 class="apply-font-name lh-base mx-0 mt-0 mb-1 px-2 py-0 text-truncate" id="ccg-name-output">Character Name</h3> <hr class="m-0" /> </div> <blockquote class="card-text blockquote align-items-start d-flex m-0"> <p class="apply-font-quote fs-6 fst-italic mx-0 mt-1 mb-0 text-truncate-ml-2 px-2 py-0" id="ccg-quote-output">A short but memorable quote...</p> </blockquote> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </main>
Changelog:
2021-08-15
- Bugfix
This awesome jQuery plugin is developed by H3K83. For more Advanced Usages, please check the demo page or visit the official website.