загрузить изображение, используя элемент canvas и javascript в .net core 2.1 - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь загрузить файл, используя такие элементы, как canvas и javascript в .Net Core 2.1.Когда я нажимал кнопку «Изменить изображение», я не видел никакой реакции.Я хочу загрузить файл и добавить верхний и нижний текст, как в mem.

файл site.js

// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.

// Write your JavaScript code.
$('document').ready(function () {
    var imgForMeme = $('#start-image');
    var canvas = $('#memecanvas');
    var topText = $('#top-text');
    var bottomText = $('#bottom-text');
    var loader = $('.loader');


    imgForMeme.one("load", function () {
        var gifGen = new GifGenerator(canvas[0], imgForMeme[0], topText[0], bottomText[0]);
    }).each(function () {
        if (this.complete || /*for IE 10-*/ $(this).height() > 0)
            $(this).load();
    });

    $('#upload-file-btn').bind('click', function () {
        var input = document.createElement('input');
        input.setAttribute('type', 'file');
        $(input).bind('change', function (evt) {
            var form = new FormData(document.getElementById('change-image-form'));
            var file = evt.target.files[0];
            form.append("image", file);
            $.ajax({
                url: "api/File",
                type: "POST",
                data: form,
                processData: false,
                contentType: false,
                success: function (result) {
                    loader.css('display', 'inherit')
                    imgForMeme.attr('src', result);
                    setTimeout(function () {
                        var gifGen = new GifGenerator(canvas[0], imgForMeme[0], topText[0], bottomText[0]);
                        loader.css('display', 'none')
                    }, 1000);

                },
                error: function (result) {
                    alert('Something went wrong...');
                }
            });
        });
        input.click();
    });
});


//dealing with canvas
function GifGenerator(canvasElem, imgElem, topTextInput, bottomTextInput) {
    var memeWidth = imgElem.width;
    var memeHeight = imgElem.height;
    // var canvas = document.getElementById('memecanvas');
    var canvas = canvasElem;
    ctx = canvas.getContext('2d');


    // Set the text style to that to which we are accustomed

    canvas.width = memeWidth;
    canvas.height = memeHeight;

    //  Grab the nodes
    // var img = document.getElementById('start-image');
    var img = imgElem;
    var topText = topTextInput;
    var bottomText = bottomTextInput;
    //var topText = document.getElementById('top-text');
    //var bottomText = document.getElementById('bottom-text');

    // When the image has loaded...
    //img.onload = function () {
    //    drawMeme()
    //}

    topText.addEventListener('keydown', drawMeme)
    topText.addEventListener('keyup', drawMeme)
    topText.addEventListener('change', drawMeme)

    bottomText.addEventListener('keydown', drawMeme)
    bottomText.addEventListener('keyup', drawMeme)
    bottomText.addEventListener('change', drawMeme)

    function drawMeme() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);

        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

        ctx.lineWidth = 4;
        ctx.font = '20pt sans-serif';
        ctx.strokeStyle = 'black';
        ctx.fillStyle = 'white';
        ctx.textAlign = 'center';
        ctx.textBaseline = 'top';

        var text1 = document.getElementById('top-text').value;
        text1 = text1.toUpperCase();
        x = canvas.width / 2;
        y = 0;

        wrapText(ctx, text1, x, y, 300, 28, false);

        ctx.textBaseline = 'bottom';
        var text2 = document.getElementById('bottom-text').value;
        text2 = text2.toUpperCase();
        y = canvas.height;

        wrapText(ctx, text2, x, y, 300, 28, true);

    }

    function wrapText(context, text, x, y, maxWidth, lineHeight, fromBottom) {

        var pushMethod = (fromBottom) ? 'unshift' : 'push';

        lineHeight = (fromBottom) ? -lineHeight : lineHeight;

        var lines = [];
        var y = y;
        var line = '';
        var words = text.split(' ');

        for (var n = 0; n < words.length; n++) {
            var testLine = line + ' ' + words[n];
            var metrics = context.measureText(testLine);
            var testWidth = metrics.width;

            if (testWidth > maxWidth) {
                lines[pushMethod](line);
                line = words[n] + ' ';
            } else {
                line = testLine;
            }
        }
        lines[pushMethod](line);

        for (var k in lines) {
            context.strokeText(lines[k], x, y + lineHeight * k);
            context.fillText(lines[k], x, y + lineHeight * k);
        }
    }

    drawMeme();
}

Views-> File-> Index.cshtml

@model MemeGenerator.Models.AppSettings


<h2>CreateMeme</h2>
@{
    ViewData["Title"] = "Home Page";
}
<div class="row">
    <div style="text-align:center" class="col-lg-6 col-lg-offset-3">
        <h2>Meme Generator</h2>
    </div>
    <div style="text-align:center" class="col-lg-6 col-lg-offset-3">
        <img style="width:100%; position:absolute; left:-2000px;" id="start-image" src="https://eu.alienwarearena.com/ucf/show/652485/boards/gamer-setups/Image/390235-1-tux-r-jpg" alt="" />
        <div class="form-group">
            <form id="change-image-form" enctype="multipart/form-data">
                <button type="button" id="upload-file-btn" class="btn btn-primary">Change image</button>
            </form>
        </div>
        <div class="loader"></div>
        <canvas id="memecanvas">
            Sorry, canvas not supported
        </canvas>
        <div class="form-group">
            <label for="usr">Top text</label>
            <input type="text" class="form-control" id="top-text">
        </div>
        <div class="form-group">
            <label for="usr">Bottom text</label>
            <input type="text" class="form-control" id="bottom-text">
        </div>
    </div>
</div>
<hr />

<div>
    <a asp-controller="Home" asp-action="Index">Back to List</a>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Shared -> _ Layout.cshtml-часть кода, где я использовал контроллер Memy и действие CreateMeme

 @if (SignInManager.IsSignedIn(User))
                    {
                        <environment names="Staging,Production">
                            <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
                                  asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
                                  asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
                            <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
                        </environment>
                        @Html.Raw(JavaScriptSnippet.FullScript)
                        <li><a asp-area="" asp-controller="Memy" asp-action="CreateMeme">Wstaw mema</a></li>


                    }

MemyController

  public class MemyController : Controller
    {
        public IActionResult CreateMeme()
        {
            return View();
        }
    }

этот вид теперь https://imgur.com/sXeea4Cи я хочу что-то вроде этого: https://imgur.com/6F2r72m

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...